2017-05-22 90 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 –