此问题适用于iOS版本兼容性.
我知道如果函数存在,如果它是使用respondsToSelector的典型Objective-C样式方法,则该函数是否存在.即对于如下方法:
- (void) someMethod:(NSInteger)someParameter;
Run Code Online (Sandbox Code Playgroud)
您可以使用:
if ([self respondsToSelector:@selector(someMethod:someParameter)]) {
//do something
}
Run Code Online (Sandbox Code Playgroud)
但是C风格的功能呢?如何检查是否存在如下函数:
void CStyleFunctionName(FoundationTypeRef parameter);
Run Code Online (Sandbox Code Playgroud)
谢谢!
Fab*_*ser 10
Xcode(至少从4.3开始)支持弱链接,你可以执行以下操作来查看是否可以调用C函数:
// UIGraphicsBeginImageContextWithOptions() was introduced in iOS 4 in order to support the Retina displays.
if (UIGraphicsBeginImageContextWithOptions != NULL) {
UIGraphicsBeginImageContextWithOptions(...);
}
else {
UIGraphicsBeginImageContext();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
动态加载:
#include <dlfcn.h>
void *fptr = dlsym(NULL, "CStyleFunctionName");
if (fptr != NULL) {
// existent
} else {
// nonexistent
}
Run Code Online (Sandbox Code Playgroud)
另请注意,在C中,没有方法,只有函数.