2010-04-27 24 views
1

我的問題是這樣的:XCode項目報告丟失的文件,如果鏈接框架包含私有頭

  • 我的框架包含公共和私有頭 - 公頭導入私有頭在框架
  • 我應用程序鏈接到此框架導入公共標頭

現在,當我編譯它時,XCode抱怨丟失的文件(通過fram間接導入的私有頭文件eworks公共標題)。我在stackoverflow的某處讀到我應該這樣做:

「在公共頭文件中使用@class來包含其他接口並在實現文件(.m)中使用#import。」

我覺得這個解決方案很不令人滿意 - 你也必須將它用於循環依賴。有沒有更好的方法來保持我的標題私人?

+1

目前尚不清楚你正在努力完成什麼。前瞻性聲明方法的「不令人滿意」是什麼? – 2010-04-27 14:51:59

+0

我覺得我不能區分源代碼中的公共和私有頭文件,而不是隻能在目標配置中進行設置。 如果稍後將私人頭部移動到公共場所,我必須在之後「清理」代碼 - 這可能會導致「不同步」問題。 – jhoff 2010-04-29 08:06:52

回答

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 
+0

感謝您的詳細示例,但是這個@class聲明正是我所不滿意的(請參閱上面的註釋) – jhoff 2010-04-29 08:07:31

+0

不要誤解我的意思,這是一個很好且有效的解決方案,但我要求的是一種「更清潔」的解決方案,而不是這個 - 或者如果有的話:) – jhoff 2010-04-29 08:16:15

+0

@class是乾淨的,事實上該關鍵字主要用於防止或解決循環導入的情況。與C++中的「class」一樣。 – LearnCocos2D 2013-10-07 16:47:22