我遇到了一个非常有趣的情况,不知道如何解决。我将首先概述我的程序的体系结构。我有一个 UITableViewController 派生类,它也实现了我的委托协议。此表格视图中的单元格是自定义单元格,每个单元格都有一个强(分配)类型属性给委托(表格视图控制器)。委托处理一些 UI 操作。
为了重现崩溃,我加载了表格视图,然后离开它。通常在这里,表格视图将被释放,但在我的情况下,单元格仍然持有对它的强引用,因此它保留在内存中。问题是,当内存警告在此之后到达设备时,我会崩溃。我推断会发生以下情况:
- 表视图控制器收到内存警告
- 它会释放所有(可重复使用的)细胞
- 在单元格的 dealloc 中,我 nil 委托属性,因此它们向表视图控制器发送释放。
- 当最后一个单元格的属性为零时,表格视图的引用计数达到零,因此它将自行释放
- 释放单元格后,表视图的 didReceiveMemoryWarning 的默认实现继续,但已经在一个已释放的僵尸对象上
- 有时稍后它会在僵尸上调用 viewDidUnload 并使应用程序崩溃。
我该如何解决这种情况?
PS:显然我不使用ARC