iOS视图控制器是否可能/期望它的视图寿命更长?

时间:2016-11-04 06:59:58

标签: ios uiview uiviewcontroller uikit uiview-hierarchy

在我正在处理的应用中,我们有时会在网络请求的完成部分中出现随机崩溃。

事件链如下:

  1. 将视图控制器添加为子VC。父母已注册为孩子的代表。
  2. 孩子调用委托方法来调用某些API。
  3. 父级获取主队列上的响应JSON数据。
  4. 父级根据收到的数据更新子级视图。
  5. 然而,在最后一部分中,崩溃是随机发生的。重现起来非常困难,Crashlytics显示由于引用了nil变量(子视图控制器的视图层次结构中的子视图)而发生崩溃。父母现在还活着。

    它不是在调用子视图控制器的函数时崩溃,而是在引用函数内部的视图时崩溃,因此我唯一的猜测是在子视图控制器之前释放视图。

    所以我的问题是,正如标题所说,视图控制器是否可能或预期会超出其观点?

    这就是UIViewController文件中所说的内容:

      

    视图控制器是其视图的唯一所有者及其任何子视图   创建。它负责创建这些视图和   在适当的时候放弃对它们的所有权,例如何时   视图控制器本身已发布。

    由于视图控制器的引用计数为0,我一直认为该视图已发布。

    更新我没有提供,而是将其添加为子视图控制器。添加了更详细的解释。

1 个答案:

答案 0 :(得分:0)

问题不在于你的View Controller正在超越View,而是因为一旦一个Queue即一个闭包或一个块(在你的情况下是你的API调用方法的回调)被调度,系统会保持它存活并保持即使封闭或块的所有者(在您的情况下是您的View Controller)被取消分配,也是对它的强引用。因此,对于解决方案,您可以在闭包或块中使用弱自我。