ios - 如何在后台加载故事板?
问题描述
我已将我的应用程序拆分为多个故事板,以编程方式调用。我应该如何在后台加载它们,这样用户就不必等待应用程序响应几秒钟,尤其是在 iPad 2 和 iPhone 4s 等速度较慢的设备上?
解决方案
UIStoryboard
不幸的是,如果允许从后台线程创建,它没有记录(至少我不记得在哪里) 。通常,UIKit 类不是线程安全的,只能在主线程中使用。所以你需要自己调查。
从技术上讲,UIStoryboard.init(name:bundle:)
不应该造成那么大的延迟,因为当 XCode 编译您的项目时,它会将您的故事板拆分为单个 NIB 文件(每个用于一个视图控制器,作为序列化对象图)并仅引用它们。因此,大部分运行时成本应该是从该故事板实例化视图控制器,而不是故事板本身。
但是您可以自己尝试并检查运行时成本:
- 创建一个“全局”字典
- 使用一些 GDC 后台线程实例化所有故事板
- 并将它们(使用情节提要的名称作为键)存储在该字典中
- 也许还可以实例化所有视图控制器(并将它们存储为子条目)
但是您需要同步对该字典的访问,因为主线程可能希望同时访问它。更糟糕的是,也许你的主线程必须等到你的后台线程在你的应用程序中创建了所有的故事板,这比仅仅按需创建它们需要更长的时间,所以启动时间可能会明显更长。
推荐阅读
- angularjs - 我应该将 auth0 添加到后端还是前端?
- bash - gstreamer textoverlay 覆盖整个流
- python - 检查正态分布
- google-chrome - Google Apps 脚本 - «window.top.location.href» 重定向停止工作
- angular-cli - Angular 10:如何在生产中从 vendor.js 中删除评论?
- api - Swagger - 将内容显示为文本
- python - 无论字符串大小如何,BERT 输出的形状都可以固定吗?
- html - 如何在滚动区域下方写入所需的错误?
- roblox - 我无法让我的 Data Store V2 工作,它总是返回 nil
- javascript - 使用 ajax 请求时,jquery 和样式不起作用