Objective c 可以使用预处理器指令为Mac和iOS导入不同的头文件吗?
我正在为MacOSX和iOS编写一个类库,作为OSX的Cocoa框架和iOS的静态库发布。为了简化问题,我打算在Xcode中使用多个目标。但是,Mac OS X上的类与COCOA.H链接,而在iOS上,它们与Buff.H.链接。 我的问题基本上是:Objective c 可以使用预处理器指令为Mac和iOS导入不同的头文件吗?,objective-c,c-preprocessor,Objective C,C Preprocessor,我正在为MacOSX和iOS编写一个类库,作为OSX的Cocoa框架和iOS的静态库发布。为了简化问题,我打算在Xcode中使用多个目标。但是,Mac OS X上的类与COCOA.H链接,而在iOS上,它们与Buff.H.链接。 我的问题基本上是: LI> Mac OS X框架能代替基础框架吗?框架中使用的类有NSString、NSMutableString和NSMutableArray 或者我可以在头文件中使用预处理器指令来控制框架包含,例如 #ifdef MacOSX #impo
-
<> LI> Mac OS X框架能代替基础框架吗?框架中使用的类有NSString、NSMutableString和NSMutableArray
- 或者我可以在头文件中使用预处理器指令来控制框架包含,例如
#ifdef MacOSX #import <Cocoa/Cocoa.h> #else #import <Foundation/Foundation.h> #endif
#ifdef MacOSX #进口 #否则 #进口 #恩迪夫
-
<> LI> Mac OS X框架能代替基础框架吗?框架中使用的类有NSString、NSMutableString和NSMutableArray
- 或者我可以在头文件中使用预处理器指令来控制框架包含,例如
是的,你可以。事实上,我认为这是唯一的方法。您可以使用它们来分离依赖于平台的代码(请参见
TargetConditionals.h
):
这里有一个。它就像一个符咒:
#ifdef __APPLE__
#include "TargetConditionals.h"
#if TARGET_IPHONE_SIMULATOR
// ios simulator
#elif TARGET_OS_IPHONE
// ios device
#elif TARGET_OS_MAC
// mac os
#else
// Unsupported platform
#endif
#endif
这对我来说非常有效:
#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
//iOS
#else
//Mac
#endif
我做了一些测试,并相应地修改了代码。显然,
TARGET\u OS\u MAC
也是为iOS定义的。最好是仔细研究一下TargetConditionals.h
,看看哪些宏适合您的需要。有很多。我相信现在你需要使用\if TARGET\u OS\u IPHONE
,而不是\ifdef
。这个答案是错误的。有两个问题:首先,TARGET\u OS\u IPHONE
将始终被定义。它有时被定义为0,但它仍然被定义。与目标IPHONE模拟器相同。但是,另外,TARGET\u IPHONE\u SIMULATOR
永远不会为1,除非TARGET\u OS\u IPHONE
也为1。如果您需要特别检查iOS模拟器,您应该首先进行检查,例如:\If TARGET\u IPHONE\u simulator
/\elif TARGET\u OS\u IPHONE
/\elif TARGET\u OS\u MAC
/\endif
。看看这个。谢谢。思考这个问题,基金会是一个框架,因此我认为不应该有问题。我去试试看!想想看,核心情节正是你想做的。如果你有问题,看看他们做了什么。我认为这是唯一的答案,实际上会工作。
#ifdef __IPHONE_OS_VERSION_MAX_ALLOWED
//iOS
#else
//Mac
#endif