【问题标题】:Linking all frameworks as optional将所有框架链接为可选
【发布时间】:2016-04-05 08:34:01
【问题描述】:

我阅读了 this documentation article 关于库和框架链接的内容,下面的部分引起了我的注意:

... 只有在需要时才会加载可选框架。如果将永远不需要的大型库指定为可选,则应用程序的初始加载会更快。

所以我问为什么不将所有框架设置为Optional,如果它们会在必要时加载?有什么缺点?

【问题讨论】:

    标签: ios objective-c frameworks dynamic-linking


    【解决方案1】:

    使用可选库需要额外的代码,因为它使用了weak linking

    if (MyWeakLinkedFunction != NULL)
    {
        result = MyWeakLinkedFunction();
    }
    

    这使得使用库变得很痛苦;我宁愿知道这些符号在程序加载时是可用的,如果它们不是,O/S 可以处理告诉用户。

    【讨论】:

    • 框架呢?或者更重要的是,像AccountsAVFoundation 这样的 Apple 框架?
    • 我不明白你的问题。
    • 您的回答是关于库,而不是框架。文档中的will be loaded only if needed 不是替换了您的if (MyWeakLinkedFunction != NULL) 吗?你为什么说你需要检查,如果它说如果需要它会被加载? needed,在我看来,就是result = MyWeakLinkedFunction();
    • 框架只是修饰过的动态库。仅假设可选符号可用的危险在于,您可以通过取消引用 NULL 简单地崩溃。如果库包含一个 Objective-C 类,您还需要使用类似的技术来确保它们可用。如果您知道该符号可用,则没有害处,但也没有优势。
    • 是的;但是,对于必需的库也是如此,假设符号是从库中访问的第一个符号。
    【解决方案2】:

    我猜是因为这条线

    应用程序的初始加载...

    如果您将其设置为 optionaly,则稍后在应用程序中可能会有“大”负载,这可能是不需要的。所以尽早加载框架,会减少以后的加载时间。

    反正我是这么想的

    【讨论】:

    • 但同时,大量的应用程序加载时间是不希望的,这也是我的问题之一。我认为如果我将它们标记为Optional,我可以减少加载时间。
    • 好吧,您可以将不太可能使用的那些标记为可选。而那些每次都会使用的,一直不应该是可选的。但除此之外,测试一下,看看它是否有问题,当一切都是可选的:)
    猜你喜欢
    • 2022-08-03
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2012-08-11
    相关资源
    最近更新 更多