Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 不同版本的Mac OS X之间是否有单独的代码?_Objective C_Macos_Cocoa_Macros - Fatal编程技术网

Objective c 不同版本的Mac OS X之间是否有单独的代码?

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或更高版本下加载,但可以在

我希望一些代码在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或更高版本下加载,但可以在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代码。