objective-c - iPhone项目常数

标签 objective-c iphone xcode c-preprocessor constants

我希望我的项目中有一个常量可以在 Lite 和 Pro 版本之间切换。我不认为这是最好的方法,但我正在尝试:

  1. 在我的应用程序委托(delegate)中添加一个常量

    #define BUILD_PRO 1 //0 => LITE, 1 => PRO
    
  2. 当我需要它时,我导入 appDelegate 并测试它:

    #import "myAppDelegate.h"
    

    然后稍后

    #if (BUILD_PRO==1)
    NSLog(@"this is pro version");
    #endif
    

问题是此代码在某些文件中有效,但在其他文件中无效。我还没有找到这种行为的任何解释;有人能解释一下吗?

从同一项目获得两个版本(专业版和精简版)的正确方法是什么?

最佳答案

是的。预处理器定义就是实现这一点的方法。

我想它在某些文件中起作用,而在其他文件中不起作用,因为有些文件可能不包含您的 myAppDelegate.h 文件,因此无法获取定义。我建议定义“Lite Version”和“Pro Version”目标,并在每个目标的构建配置中设置预处理器变量。

创建精简版目标后(只需选择“专业版”目标上的重复目标上下文菜单项即可创建精简版目标):

  • 进入项目/编辑目标“专业版本”菜单项
  • 转到“构建”选项卡并找到“预处理”部分(朝向底部)。
  • 将 BUILD_PRO=1 添加到“预处理宏”部分。

这样您就不必更改任何头文件,您只需要构建精简版或完整目标。如果您需要在产品中的任何位置添加专业功能,只需使用:

#ifdef BUILD_PRO
// do some pro stuff
#endif

关于objective-c - iPhone项目常数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2052943/

相关文章:

iphone - 如何以编程方式向 UISearchBar 添加文本

ios - 如何在 iphone sdk objective c 中编辑本地通知

ios - 自动将 dSYM 上传到 Crittercism 时构建失败

c++ - 在C++中使用XGBoost时的 undefined symbol

ios - CJSON反序列化错误

ios - 从 imagePickerController AFNetWorking 3.0 将图像上传到服务器

iphone - 自动将生成的源文件添加到 xcode 项目

swift - 使用未声明的标识符 "customTableViewCell"

objective-c - UIResponder 链题

iphone - 让 url 出现在 UITextview 中