Objective-C: How to check if a C function is supported

cocoa-touch, iphone, objective-c, respondstoselector

Solution

Here's another option, which I've been using.

C functions are pointers. If you "weak" link to `UIKit` framework, on iOS 3 the function pointer will simply be `NULL`, so you can test for the existence of the function by doing:

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

See also: How do I weak link frameworks on Xcode 4?

Problem

How can I perform a run-time check to see if I can use `UIGraphicsBeginImageContextWithOptions`, which is only available starting with iOS 4. I know I could check `[[UIDevice currentDevice] systemVersion]`, but Apple recommends using things like `NSClassFromString()` or `respondsToSelector:`. Is there a `respondsToSelector:` for C functions?

Original source

Related problems