【问题标题】:Xcode project complains about missing files if a linked framework contains private headers如果链接的框架包含私有头文件,Xcode 项目会抱怨缺少文件
【发布时间】:2011-02-12 21:44:57
【问题描述】:

我的问题是这样的:

  • 我的框架包含公共和私有标头 - 公共标头导入私有标头在框架中
  • 链接到此框架的我的应用导入公共标头

现在当我编译它时,Xcode 抱怨缺少文件(通过框架公共头文件间接导入的私有头文件)。我在stackoverflow 某处读到我应该这样做:

“在公共头文件中使用@class 包含其他接口,在实现文件(.m)中使用#import。”

我发现这个解决方案非常不令人满意——你也必须将它用于循环依赖。有没有更好的方法让我的标题保持私密?

【问题讨论】:

  • 尚不清楚您要完成什么。前向声明方法有什么“不满意”的地方?
  • 我不满意我必须区分源本身中的公共和私有标头,而不仅仅是能够在目标配置中设置它。如果我稍后将私有标头移至公共标头,则必须在之后“清理”代码 - 这可能会导致“不同步”问题。

标签: objective-c cocoa gcc header private


【解决方案1】:

要了解循环引用,请使用标头中的@class 指令和源文件中的#import。

在 OtherClass.h 中:

@class MyClass;
@interface OtherClass
{
    MyClass *myInstance;
}
@end

在 OtherClass.m 中:

#import "OtherClass.h"
#import "MyClass.h"
@implement OtherClass
@end

在 MyClass.h 中:

@class OtherClass;
@interface MyClass
{
    OtherClass *otherInstance;
}
@end

在 MyClass.m 中:

#import "MyClass.h"
#import "OtherClass.h"
@implement MyClass
@end

【讨论】:

  • 感谢您提供详尽的示例,但这个@class 声明正是我觉得不满意的地方(见上面的评论)
  • 别误会,这是一个很好且有效的解决方案,但我要求的是比这更“干净”的解决方案——或者如果有的话:)
  • @class 尽可能干净——事实上,该关键字主要用于防止或解决循环导入情况。与 C++ 中的“类”相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多