iPhone SDK中弱链接的替代方案?

Mos*_*she 4 cocoa-touch objective-c backwards-compatibility weak-linking ios

我希望我的应用程序与旧版iPhone OS兼容.我确实看到了作为一种选择提到的弱链接.我可以使用操作系统版本检测代码来避免操作系统无法处理的代码块吗?(说iAD?)

if(OS >= 4.0){
//set up iADs using "NDA code"...
} 
Run Code Online (Sandbox Code Playgroud)

如果是的话,会取代if(OS >= 4.0)什么?

Jas*_*ien 15

你应该对新的框架进行弱连接.除了你应该检查的新API使用类似方法的可用性NSClassFromString,respondsToSelector,instancesRespondToSelector等.

例如.MessageUI.framework的弱链接(旧的例子,但仍然相关)

首先检查MFMailComposerController该类是否存在:

Class mailComposerClass = NSClassFromString(@"MFMailComposerController");
if (mailComposerClass != nil)
{
    // class exists, you can use it
}
else
{
    // class doesn't exist, work around for older OS
}
Run Code Online (Sandbox Code Playgroud)

如果需要使用新的常量,类型或函数,可以执行以下操作:

if (&UIApplicationWillEnterBackgroundNotification != nil)
{
    // go ahead and use it
}
Run Code Online (Sandbox Code Playgroud)

如果您需要知道是否可以在现有类上使用新方法,则可以执行以下操作:

if ([existingInstance respondsToSelector:@selector(someSelector)])
{
    // method exists
}
Run Code Online (Sandbox Code Playgroud)

等等.希望这可以帮助.