7

この質問は、iOS バージョンの互換性を対象としています。

RespondsToSelector を使用して、関数が典型的な Objective-C スタイルのメソッドであるかどうかを確認する方法を知っています。つまり、次のようなメソッドの場合:

- (void) someMethod:(NSInteger)someParameter;

以下を使用できます。

if ([self respondsToSelector:@selector(someMethod:someParameter)]) {
    //do something
}

しかし、C スタイルの関数はどうでしょうか? 次のような関数が存在するかどうかを確認するにはどうすればよいですか。

void CStyleFunctionName(FoundationTypeRef parameter);

ありがとう!

4

2 に答える 2

11

Xcode (少なくとも 4.3 以降) は弱いリンクをサポートしており、次のようにして C 関数を呼び出せるかどうかを確認できます。

// UIGraphicsBeginImageContextWithOptions() was introduced in iOS 4 in order to support the Retina displays.
if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(...);
}
else {
    UIGraphicsBeginImageContext();
}
于 2012-09-20T18:13:31.560 に答える
7

動的負荷:

#include <dlfcn.h>

void *fptr = dlsym(NULL, "CStyleFunctionName");
if (fptr != NULL) {
    // existent
} else {
    // nonexistent
}

また、C にはメソッドがなく、関数のみがあることに注意してください。

于 2012-09-20T17:33:01.377 に答える