Objective-C:#define vs extern const

DCM*_*xxx 11 macos objective-c ios

我之前已经问过这个问题,但我似乎无法在Apple的文档中找到相关信息; 也许你们有些人做过.

很多Objective-C代码都在.h文件中使用了跨文件常量#define.其他人在文件中使用.mwith常量的方法.extern.h

我理解差异,包括优点和缺点,但Apple是否说明在iOS开发中使用哪一个?

Abi*_*ern 22

在extern上使用#defines的麻烦在于编译器无法进行任何类型检查.如果你#define一个字符串,没有什么可以阻止你在你想要的地方使用它,比如一个数字.如果您使用静态NSString,如果您尝试在不期望字符串的地方使用它,编译器将发出警告.


ily*_* n. 14

Apple的建议extern:

定义用于通知名称和字典键等用途的字符串的常量.通过使用字符串常量,您可以确保编译器验证指定了正确的值(即,它执行拼写检查).

不可否认,他们有时会对此不一致.