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

时间:2010-06-16 18:15:01

标签: ios objective-c cocoa-touch backwards-compatibility weak-linking

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

if(OS >= 4.0){
//set up iADs using "NDA code"...
} 

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

1 个答案:

答案 0 :(得分:15)

你应该与新框架建立弱联系。除此之外,您应该使用NSClassFromStringrespondsToSelectorinstancesRespondToSelector等方法检查新API的可用性。

EG。与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
}

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

if (&UIApplicationWillEnterBackgroundNotification != nil)
{
    // go ahead and use it
}

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

if ([existingInstance respondsToSelector:@selector(someSelector)])
{
    // method exists
}

等等。希望这会有所帮助。