Objective c 不同版本的Mac OS X之间是否有单独的代码?
我希望一些代码在10.6及以下版本下编译,而不是在10.7及以上版本下编译 例如:Objective c 不同版本的Mac OS X之间是否有单独的代码?,objective-c,macos,cocoa,macros,Objective C,Macos,Cocoa,Macros,我希望一些代码在10.6及以下版本下编译,而不是在10.7及以上版本下编译 例如: #ifdef current version is MAC_OS_X_VERSION_10_6 or below // do this elif current version is MAC_OS_X_VERSION_10_7 or above //do that #endif 有人能帮我用合适的宏吗?我查看了一下,但无法找出正确的ifdef 我有一个动态库,它不能在10.7或更高版本下加载,但可以在
#ifdef current version is MAC_OS_X_VERSION_10_6 or below
// do this
elif current version is MAC_OS_X_VERSION_10_7 or above
//do that
#endif
有人能帮我用合适的宏吗?我查看了一下,但无法找出正确的ifdef
我有一个动态库,它不能在10.7或更高版本下加载,但可以在10.6下正确加载。这是由于专用符号\u CGContextAppendPath
造成的。我想让它在10.6及以下使用,但避免在10.7及以下使用。这是因为10.7及以上版本中不存在\u CGContextAppendPath
符号
我曾经
SInt32 version = 0;
Gestalt( gestaltSystemVersion, &version );
bool lionabove = ( version >= 0x1070 );
不起作用。对于目标C,直接途径是通过
[object respondsToSelector:][/code>检查特定API的可用性
对于您正在使用的C库,请弱链接到CoreGraphics.framework
(以便在某些函数不存在时加载不会失败),并通过&\u CGContextAppendPath!=空
和中的详细信息。对于目标C,直接途径是通过[object respondsToSelector:][/code>检查特定API的可用性
对于您正在使用的C库,请弱链接到CoreGraphics.framework
(以便在某些函数不存在时加载不会失败),并通过&\u CGContextAppendPath!=空
和中的详细信息。苹果为iOS和Mac OS 10.6及以上版本推出了一个新的Availability.h
宏文件(位于/usr/include/Availability.h
)。你可以这样做:
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
// code to run up through 10.6
#else
// code to run on 10.7 or higher
#endif
这方面的文档如下:,如果您混合使用iOS和Mac OS X代码,尤其值得一看。我还强烈建议阅读上面提到的头文件。苹果为iOS和Mac OS 10.6及以上版本引入了一个新的Availability.h
宏文件(位于/usr/include/Availability.h
)。你可以这样做:
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
// code to run up through 10.6
#else
// code to run on 10.7 or higher
#endif
这方面的文档如下:,如果您混合使用iOS和Mac OS X代码,尤其值得一看。我还强烈建议您阅读上面提到的头文件。您的问题不清楚;如果项目的部署目标为10.6或更低版本,您希望编译一些代码?在10.7下加载时会发生什么?dlopen()返回null。但是如果我对CGContextAppendPath()的使用进行评论,它就可以正常工作。这是因为该符号在10.7及以上版本中不存在。那么为什么不检查dlopen()
是否返回NULL
,如果是,则执行另一个代码路径?这样您就可以访问动态库的源代码了?然后我建议将库和可执行文件弱链接到CoreGraphics.framework。那么它也应该能够在10.7上加载。在使用\u CGContextAppendPath
的代码中,检查&\u CGContextAppendPath!=NULL,如果不是,则不要使用它。但是请记住,一般来说使用私有API是个坏主意;如果项目的部署目标为10.6或更低版本,您希望编译一些代码?在10.7下加载时会发生什么?dlopen()返回null。但是如果我对CGContextAppendPath()的使用进行评论,它就可以正常工作。这是因为该符号在10.7及以上版本中不存在。那么为什么不检查dlopen()
是否返回NULL
,如果是,则执行另一个代码路径?这样您就可以访问动态库的源代码了?然后我建议将库和可执行文件弱链接到CoreGraphics.framework。那么它也应该能够在10.7上加载。在使用\u CGContextAppendPath
的代码中,检查&\u CGContextAppendPath!=NULL,如果不是,则不要使用它。但是请记住,通常使用私有API是个坏主意。请查看标签并阅读问题。它被标记为osx
和cocoa
,问题明确地说MAC_OS_X_VERSION
。是的,我认为MacGeek误解了为不同的操作系统版本创建不同的代码。我认为MacGeek所说的是,他希望在运行时执行不同的代码行,如果我没有弄错的话,这不是编译时。我告诉他在运行时检查[[UIDevice currentDevice]systemVersion]
,这正是我的回答……是的,我想,我误解了为不同的操作系统版本创建不同的代码。但它是一个“C”库,不能在其中使用目标C代码。请查看标签并阅读问题。它被标记为osx
和cocoa
,问题明确地说MAC_OS_X_VERSION
。是的,我认为MacGeek误解了为不同的操作系统版本创建不同的代码。我认为MacGeek所说的是,他希望在运行时执行不同的代码行,如果我没有弄错的话,这不是编译时。我告诉他在运行时检查[[UIDevice currentDevice]systemVersion]
,这正是我的回答……是的,我想,我误解了为不同的操作系统版本创建不同的代码。但它的“C”库不能在其中使用目标C代码。