我想使用仅在最新 iOS SDK 上可用的核心基础方法,并回退到以前的 SDK 的不同方法。有没有类似于 Cocoa 为 NSObject 做的事情?:
- (BOOL)respondsToSelector:(SEL)aSelector
更多的上下文,假设 ABAddressBookCreate() 仅在 iOS5 中可用,而我的应用程序针对 iOS 4.3+。我想检查 ABAddressBookCreate() 在运行时是否可用,并根据它执行不同的操作。
我想使用仅在最新 iOS SDK 上可用的核心基础方法,并回退到以前的 SDK 的不同方法。有没有类似于 Cocoa 为 NSObject 做的事情?:
- (BOOL)respondsToSelector:(SEL)aSelector
更多的上下文,假设 ABAddressBookCreate() 仅在 iOS5 中可用,而我的应用程序针对 iOS 4.3+。我想检查 ABAddressBookCreate() 在运行时是否可用,并根据它执行不同的操作。
试试这个(不需要弱链接):
#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
}
我从未尝试过,但也许这会有所帮助:
检查清单 3-2。