【发布时间】:2016-04-05 08:34:01
【问题描述】:
我阅读了 this documentation article 关于库和框架链接的内容,下面的部分引起了我的注意:
... 只有在需要时才会加载可选框架。如果将永远不需要的大型库指定为可选,则应用程序的初始加载会更快。
所以我问为什么不将所有框架设置为Optional,如果它们会在必要时加载?有什么缺点?
【问题讨论】:
标签: ios objective-c frameworks dynamic-linking
我阅读了 this documentation article 关于库和框架链接的内容,下面的部分引起了我的注意:
... 只有在需要时才会加载可选框架。如果将永远不需要的大型库指定为可选,则应用程序的初始加载会更快。
所以我问为什么不将所有框架设置为Optional,如果它们会在必要时加载?有什么缺点?
【问题讨论】:
标签: ios objective-c frameworks dynamic-linking
使用可选库需要额外的代码,因为它使用了weak linking:
if (MyWeakLinkedFunction != NULL)
{
result = MyWeakLinkedFunction();
}
这使得使用库变得很痛苦;我宁愿知道这些符号在程序加载时是可用的,如果它们不是,O/S 可以处理告诉用户。
【讨论】:
Accounts、AVFoundation 这样的 Apple 框架?
will be loaded only if needed 不是替换了您的if (MyWeakLinkedFunction != NULL) 吗?你为什么说你需要检查,如果它说如果需要它会被加载? needed,在我看来,就是result = MyWeakLinkedFunction();。
NULL 简单地崩溃。如果库包含一个 Objective-C 类,您还需要使用类似的技术来确保它们可用。如果您知道该符号可用,则没有害处,但也没有优势。
我猜是因为这条线
应用程序的初始加载...
如果您将其设置为 optionaly,则稍后在应用程序中可能会有“大”负载,这可能是不需要的。所以尽早加载框架,会减少以后的加载时间。
反正我是这么想的
【讨论】:
Optional,我可以减少加载时间。