【问题标题】:Alternatives to weak linking in iPhone SDK?iPhone SDK中弱链接的替代方案?
【发布时间】:2011-03-04 14:48:09
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您应该对新框架进行弱链接。除此之外,您还应该使用NSClassFromStringrespondsToSelectorinstancesRespondToSelector 等方法检查新 API 的可用性。

    例如。针对 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
    }
    

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

    【讨论】:

    • 为了完整起见,您能否在这里解释一下弱链接?
    • 当然,弱链接允许您将代码链接到较新的库和框架,以便在运行时不会强制执行到框架的链接(这意味着您的应用不会在不能崩溃时崩溃)在较旧的操作系统上找到库。如果您在应用程序运行时针对设备上未包含的框架或库进行强链接,它将因找不到库的(非常神秘的)错误而崩溃。弱链接可以防止这种情况。
    • 如何弱链接?能给个教程链接吗?我找不到有用的东西。
    • @Moshe - 我在这里的回答中描述了如何做到这一点:stackoverflow.com/questions/2618889/…
    • 查找对 4 之前不存在的新 API 的引用?很好的答案here
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多