3

我想使用仅在最新 iOS SDK 上可用的核心基础方法,并回退到以前的 SDK 的不同方法。有没有类似于 Cocoa 为 NSObject 做的事情?:

 - (BOOL)respondsToSelector:(SEL)aSelector

更多的上下文,假设 ABAddressBookCreate() 仅在 iOS5 中可用,而我的应用程序针对 iOS 4.3+。我想检查 ABAddressBookCreate() 在运行时是否可用,并根据它执行不同的操作。

4

2 回答 2

4

试试这个(不需要弱链接):

#include <dlfcn.h>

void *handle = dlopen("/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation", RTLD_NOW);
void *createFunc = dlsym(handle, "ABAddressBookCreate");

if (createFunc != NULL)
{
    // available
    ABAddressBookRef (*_ABAddressBookCreate)(void) = createFunc;
    // then use this function pointer as normally
}

如果您可以提供弱链接:

if (ABAddressBookCreate != NULL)
{
   // available
}
于 2012-08-01T21:02:30.943 回答
2

我从未尝试过,但也许这会有所帮助:

https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/cross_development/Using/using.html

检查清单 3-2。

于 2012-08-01T21:01:49.040 回答