objective-c - #导入中的#导入?

标签 objective-c import

Possible Duplicate:
How can I have references between two classes in Objective-C?
Objective-C #import loop

我的代码中出现了一些错误,我不确定,但我认为这是因为我是 #import在我所在的另一个接口(interface)中调用一个接口(interface) #import荷兰国际集团的另一个接口(interface)。如果我让你感到困惑,我会给你一个例子。

#import "OneClass.h"

@interface SecondClass : NSObject
{
    OneClass * obj;
}

#import "SecondClass.h"

@interface OneClass : NSObject
{
    SecondClass * obj;
}

最佳答案

是的,您有循环导入。这里的问题是第二个导入(重新导入第一个 header 的导入)基本上被编译器忽略,因为它认为它已经导入了该 header 。

这里的解决方案是使用@class前向声明而不是使用#import。这个解决方案不仅解决了循环导入问题,而且无论如何它都是一个更好的主意,因为它打破了不必要的依赖链(例如,如果我编辑 OneClass.h,SecondClass.h 将不需要重新处理)。

要在此处应用此功能,只需删除 SecondClass.h 中的 #import OneClass.h 并将其替换为 @class OneClass;

在更一般的情况下,您不需要只是为了声明使用该 header 中的类的 ivar/property/method 而#import 头文件。 @class 标记就足够了。但是,如果您从类继承,或者引用该 header 中声明的另一个非类类型,则需要#import 头文件。另请记住,如果您在 header 中使用 @class,则需要记住将实际的 #import 放入您的 .m 文件中。

关于objective-c - #导入中的#导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8334447/

相关文章:

java - 为 JellyRefreshLayout 模块导入新的 Android 模块失败

java - 如何使用 apache wicket 扩展?

ios - 如何在 PrepareForSegue 方法中获取自定义单元格的 indexPath - iOS

c++ - Code::Blocks to XCode:导入带有 GUI 的 C++

ios - XCode UI Tests 如何测试屏幕边缘平移手势?

ios - 点击按钮打开蓝牙设置

sqlite - sqlite不在命令行中创建表

postgresql - 将压缩的 CSV 文件导入 PostgreSQL

ios - 如何为整个App设置UIKeyboard-Style?

iphone - 监控 iPhone 应用程序中的内存使用情况?