在XCode 8中,当我向我的项目添加一个新的iOS头文件时,它已经包含此代码。
#ifndef SomeCoolWidget_h
#define SomeCoolWidget_h
#endif /* SomeCoolWidget */
我是否有充分的理由不删除这些指令而只是按照惯例...
@interface SomeCoolWidget
...
@end
我从来没有在我们的代码中留下那些编译器指令,它从来没有引起过问题,但如果没有问题,我就会想知道为什么该模板是每个新头文件的默认值。
答案 0 :(得分:1)
@interface SomeCoolWidget...
是" Cocoa Touch Class"。它有一个额外的模板,它会创建一个Class.h
和Class.m
文件:
对于纯C头文件,您需要预处理器指令。您可以在this answer中找到一些背景原因。
答案 1 :(得分:1)
这些被称为macro guards
,基本上预处理器正在检查项目中是否包含SomeCoolWidget
,如果包含它,则返回空白头文件。
另一个想法是当你有一堆相关的头文件要防止递归时。
让我们说A.h - >包括B.h然后B.h - >包括A.h,你不希望在你的代码中......
最后我们假设您有一个Play.h
和一个Record.h
,您可以将它们放在SomeCoolWidget
标题中,然后使用SomeCoolWidget标题来播放和录制其他标题类。
#import "Play.h"
#import "Record.h"
所以@interface SomeCoolWidget
的用法与SomeCoolWidget.h的用法不同。你需要选择适合你需要的东西