gpt4 book ai didi

iPhone SDK : what's the difference between #import and @class?

转载 作者:行者123 更新时间:2023-12-03 18:43:00 25 4
gpt4 key购买 nike

我们可以使用#import导入类声明:

#import "SomeClass.h"

或者用@class声明:

@class SomeClass;

它们有什么区别以及我们什么时候应该使用它们?

最佳答案

“导入”链接其包含的头文件。 header 中的所有内容(包括属性定义、方法声明和 header 中的任何导入)都可用。导入为链接器提供实际定义。

相比之下,@class 只是告诉链接器不要提示它没有类的定义。这是一个“契约(Contract)”,您将在另一点提供该类的定义。

大多数情况下,您使用 @class 来防止循环导入,即 ClassA 引用 ClassB,因此它在自己的 ClassA.h 中导入 ClassB.h,但 ClassB 也引用 ClassA,因此它在 ClassB.h 中导入 ClassA.h。由于 import 语句导入了 header 的导入,这会导致链接器进入无限循环。

将导入移至实现文件 (ClassA.m) 可防止出现这种情况,但当 ClassB 出现在 ClassA.h 中时,链接器将无法识别它。 @class ClassB; 指令告诉链接器您将在稍后在代码中实际使用 ClassB 之前提供 ClassB 的 header 。

关于iPhone SDK : what's the difference between #import and @class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2753499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com