如何在后台加载故事板?

时间:2018-06-07 05:36:44

标签: ios objective-c uikit uistoryboard

我已将我的应用分成多个故事板,以编程方式调用。我应该如何在后台加载它们,这样用户就不必在应用响应之前等待几秒钟,尤其是在iPad 2和iPhone 4s等较慢的设备上?

1 个答案:

答案 0 :(得分:0)

不幸的是,如果允许或不允许从后台线程创建UIStoryboard,则没有记录(至少我不记得在哪里)。典型地,UIKit类不是线程安全的,只能在主线程中使用。所以你需要调查自己。

从技术上讲,UIStoryboard.init(name:bundle:)不应该造成太大的延迟,因为当XCode编译你的项目时,它会将你的故事板分成单个NIB文件(每个文件用于一个视图控制器,作为序列化对象图)并且只是参考他们。因此,大部分运行时成本应该是从该故事板中实例化视图控制器,而不是故事板本身。

但您可以尝试自己并检查运行时成本:

  • 创建“全球”词典
  • 使用一些GDC后台线程实例化所有故事板
  • 并将它们(使用故事板的名称作为键)存储在该词典中
  • 也可以实例化所有视图控制器(并将它们存储为子条目)

但是您需要同步对该字典的访问,因为主线程可能希望同时访问它。更糟糕的是,也许你的主线程必须等到你的后台线程在你的应用程序中创建了所有的故事板,这需要更长的时间,而不仅仅是按需创建它们,因此启动时间可能会长得多。