2012-09-05 22 views
1

我創建了一個3個對象,並且鏈接在一起:在Objective-C中,我是否需要導入每個h文件以查看我的對象層次結構?

  • 問卷對象 - 它包含一個
  • NextQuestion對象 - 它包含一個
  • 回答對象 - 它有一個text屬性。

在一個視圖控制器,我希望能夠調用:

NSString *thisAnswerText = Questionnaire.nextQuestion.answer.text; 

然而,要做到這一點,我必須在所有三個文件導入到我的.m文件

#import "Questionnaire.h" 
#import "Question.h" 
#import "Answer.h" 

是否有必要導入每個.m文件中使用的每個對象?還是有什麼我可以做的,這意味着我只需要導入頂級項目,它的所有孩子都會自動引用?

注意:我知道我可以將所有三個添加到Prefix.pch文件中,但是我想知道是否我缺少一些Objective-C的技巧,它允許我聲明一個項目,並且它的子對象會自動導入?

謝謝!

+1

只導入您需要資源的標題。雖然這不像使用'#include'那樣低效,但我仍然建議你只導入你打算使用的。 –

回答

0

當您導入.h文件時.h文件中的任何導入也可用。您可能需要清理和重建,但它們應該可用。所以在你的情況下,你應該只能導入Questionaire.h

此外,如果您的應用程序取決於這些自定義類,並且它們將被用於所有地方,將它們導入.pch文件可能是一個好主意,它們將針對所有類進行預編譯。

+1

謝謝瑞恩!你釘了它。如果我在鏈中的每個.h文件中添加一個導入,我只需要添加第一個Questionaire.h即可看到該批次。你達人瑞恩!謝謝。 – theDuncs

+0

快樂編碼:) –

0

是否需要導入每個.m文件中使用的每個對象?

並非所有情況下,但如果您發送消息的對象,您應該確保編譯器看到它的聲明 - 只是因爲ObjC是一種非常動態的語言。

還是有什麼我可以做的,這意味着我只需要導入頂級項目,它所有的孩子都會自動引用?

是的,你可以任何頭添加一個#import(當然必須與平移是一致的)。但是,添加#import應該最小化,因爲世界將增加您的構建時間並引入一堆依賴項。

+1

非常感謝您的幫助。 – theDuncs

+0

@theDuncs不客氣 – justin

0

在你的接口的公共頭文件中,你應該儘可能地提前聲明,並且只需要#import什麼是真正需要的。這將有助於減少構建時間。在你的實現文件中,你可以導入任何你需要的。

有時出於可用性的考慮,您可能需要將多個頭文件收集到一個「MyFramework.h」文件中,以便每次使用類時不必添加5個導入。但是,您應該小心,因爲如果標題在許多地方導入,它可以增加構建時間。

您可能還想考慮將常用導入添加到您的前綴頭文件(.pch)中,該頭文件可以由Xcode進行預編譯以稍微改進構建時間。

+0

非常感謝。 – theDuncs

相關問題