在我正在开发的应用程序中,我们有时会在网络请求的完成部分遇到随机崩溃。
事件链如下:
- 添加一个视图控制器作为子 VC。父母注册为孩子的代表。
- 孩子调用委托方法来调用一些API。
- 父级在主队列上获取响应 JSON 数据。
- 父级根据接收到的数据更新子级中的视图作为完成。
然而,在最后一部分,崩溃是随机发生的。它很难重现,Crashlytics 显示崩溃的发生是由于引用了一个 nil 变量,即子视图控制器的视图层次结构中的一个子视图。此时父母还活着。
不是在调用子视图控制器的函数时崩溃,而是在引用函数内部的视图时崩溃,所以我唯一的猜测是视图在子视图控制器之前被释放。
所以我的问题是,正如标题所说,视图控制器是否有可能或预期会超过它的视图?
这是文件中所说的UIViewController
:
视图控制器是其视图及其创建的任何子视图的唯一所有者。它负责创建这些视图并在适当的时候放弃它们的所有权,例如当视图控制器本身被释放时。
我一直认为视图被释放是因为视图控制器的引用计数为 0。
更新而不是呈现,我将它添加为子视图控制器。添加了对所发生情况的更详细说明。