1

我向我的所有inits 和deallocs 添加了一些日志记录,以试图了解为什么我的启用 ARC 的项目随着运行时的继续消耗越来越多的内存。我发现一个视图控制器负责。初始化时的主要职责是创建一个并用对象NSMutableArray填充它。NSNull在执行期间,它将这些空对象换成更有意义的对象,反之亦然 - 一个基本的延迟加载设置。

当这个视图控制器被弹出时,当时的任何非空视图NSMutableArray都不会被释放。结果,视图控制器本身也没有被释放。

我可以通过清空NSMutableArray或将其设置为零来解决此问题。

是什么让这变得有必要?如果我创建了一个数组,即使在 ARC 下,将它设置为 nil 是否总是我的责任?还是必须有其他东西保留数组中的一个对象,并阻止它自动释放?

4

1 回答 1

1

假设NSMutableArray是一个实例变量,它应该在视图控制器被释放时被释放。如果你的控制器在唯一有对象dealloc时被调用,但是当你用“有意义的”内容填充你的数组时它没有被释放,这意味着你无疑有一个强大的引用循环,即必须有一些对视图控制器的引用,本身,在.NSMutableArrayNSNullNSMutableArray

于 2012-09-28T21:52:05.187 回答