2017-05-22 67 views
1

在XCode 8中,當我將一個新的iOS頭文件添加到我的項目中時,它已經包含此代碼。XCode /新文件/頭文件 - >默認實現

#ifndef SomeCoolWidget_h 
#define SomeCoolWidget_h 

#endif /* SomeCoolWidget */ 

有一個很好的理由,我不應該刪除這些指令,只是做平常...

@interface SomeCoolWidget 
... 
@end 

我從未離開過我們的那些代碼的編譯器指令,它從來沒有引起問題,但如果沒有問題,我就會想知道爲什麼這個模板是每個新頭文件的默認模板。

回答

1

@interface SomeCoolWidget...是一個「可可觸摸類」。有它一個額外的模板,它創建了一個Class.hClass.m文件:

對於純C頭文件,你想要的預處理指令。你可以在this answer找到一些背景。

+0

完美,謝謝 –

1

這些被稱爲macro guards基本上預處理器正在檢查,如果SomeCoolWidget包含在您的項目之前,如果它包括它返回一個空白的頭文件。

另一個想法是當你有一堆相關的頭文件你想要防止遞歸。

比方說,啊 - >包括了Bh然後了Bh - >包含啊,你不想在你的代碼...

最後,讓我們假設你有一個Play.hRecord.h,你可以把它們放在你的SomeCoolWidget標題然後使用SomeCoolWidget標題播放和記錄在其他一些類。

#import "Play.h" 
#import "Record.h" 

所以@interface SomeCoolWidget的用法是不同的,那麼SomeCoolWidget.h使用。你需要選擇適合你的需求

+0

但'#import'不會自動阻止遞歸。是不是使用它的目的而不是'#include' –

+0

不,它對我來說只是幫助組織我的代碼和編寫乾淨的代碼的一種方式。如果你想通過遞歸導入來破壞你的代碼,它不會阻止你。 –

+0

你可以檢查此線程的進一步信息https://stackoverflow.com/questions/1653958/why-are-ifndef-and-define-used-in-c-header-files –