【问题标题】:How to load storyboards in the background?如何在后台加载故事板?
【发布时间】:2018-11-16 22:06:27
【问题描述】:

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

【问题讨论】:

  • 创建指针?这不是每个人的唯一选择吗?但是为了什么!?你想耗尽内存吗?
  • 您能否添加当前实现的示例代码,以便我更好地理解您的问题?

标签: ios objective-c uikit uistoryboard


【解决方案1】:

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

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

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

  • 创建一个“全局”字典
  • 使用一些 GDC 后台线程实例化所有情节提要
  • 并将它们(使用情节提要的名称作为键)存储在该字典中
  • 还可以实例化所有视图控制器(并将它们存储为子条目)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2012-08-12
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多