在iOS应用程序中放置全局宏/函数的位置

Dan*_*ski 2 objective-c ios

在我看过的一些苹果文档中,他们建议使用宏来检查当前安装的iOS版本,它可以在整个项目中使用.它看起来像这样:

NSUInteger MajorVersionInstalled();
NSUInteger MajorVersionInstalled() {
   // Call objective-c methods and return NSUInteger
}

#define IS_OLDER_THAN_SIX (MajorVersionInstalled() < 6)
Run Code Online (Sandbox Code Playgroud)

这个想法是你可以在整个项目中使用宏进行条件检查.我想使用这个想法,但我有点困惑,因为它使用交流功能,我不知道在哪里定义它:

  • 有没有一个地方我应该用来定义它在我的项目中使用(Prefix.pch ??).
  • 函数实现是否在同一个地方?

jus*_*tin 5

有没有一个地方我应该用来定义它在我的项目中使用(Prefix.pch ??).

PCH不是一个好地方.最好放在一个单独的标题中以及#import你需要它的地方,因为这个声明很可能无处不在.注意:使用的含义NSUInteger也是该函数仅在objc源中可用.

函数实现是否在同一个地方?

除非您有特殊需要,否则声明:

 NSUInteger MajorVersionInstalled();
Run Code Online (Sandbox Code Playgroud)

属于头文件和定义:

 NSUInteger MajorVersionInstalled() {
    // Call objective-c methods and return NSUInteger
 }
Run Code Online (Sandbox Code Playgroud)

属于一个*.m文件.

一旦你这样做,你也可以创建一个功能来摆脱#define IS_OLDER_THAN_SIX (MajorVersionInstalled() < 6).

使用pch,标题中的定义和遍布各处的基础通常会减慢构建速度并创建更大的二进制文件.在小型项目中很难检测到这一点,但很快就会成为更大的代码和库中的问题.