Objective-C: как проверить, поддерживается ли функция C - PullRequest
4 голосов
/ 08 июля 2011

Как я могу выполнить проверку во время выполнения, чтобы увидеть, могу ли я использовать UIGraphicsBeginImageContextWithOptions, который доступен только с iOS 4.

Я знаю, что могу проверить [[UIDevice currentDevice] systemVersion], но Apple рекомендует использоватьтакие вещи, как NSClassFromString() или respondsToSelector:.Есть ли respondsToSelector: для функций C?

Ответы [ 3 ]

10 голосов
/ 08 июля 2011

Вот еще один вариант, который я использовал.

Функции C являются указателями. Если у вас «слабая» ссылка на UIKit framework, в iOS 3 указатель функции будет просто NULL, поэтому вы можете проверить существование функции, выполнив:

if (UIGraphicsBeginImageContextWithOptions)
{
    // On iOS 4+, use the main screen's native scale factor (for iPhone 4).
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
}
else
{
    UIGraphicsBeginImageContext(size);
}

См. Также: Как я могу слабые ссылки платформы на Xcode 4?

1 голос
/ 08 июля 2011

Что вас, вероятно, заинтересует, так это слабая ссылка . (См. «Листинг 3-2. Проверка доступности функции C».)

0 голосов
/ 08 июля 2011

Вот к чему я иду:

if ([mainScreen respondsToSelector:@selector(scale)]) {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, [[UIScreen mainScreen] scale]);
} else {
    UIGraphicsBeginImageContext(newSize);
}

Я думаю, что это достаточно хорошо, но если у вас есть предложения получше, пожалуйста, ответьте.

...