我向我所有的 init
和 dealloc
添加了一些日志记录,以试图理解为什么我的启用 ARC 的项目在运行时继续消耗越来越多的内存。我发现一个 View Controller 负责。它在初始化时的主要职责是创建一个 NSMutableArray
并用 NSNull
对象填充它。在执行期间,它将这些空对象换成更有意义的对象,反之亦然 - 一个基本的延迟加载设置。
当弹出此 View Controller 时,不会释放当时 NSMutableArray
中的任何非空 View 。结果, View Controller 本身也没有被释放。
我可以通过清空 NSMutableArray
或将其设置为 nil 来解决此问题。
有什么必要这样做?如果我创建了一个数组,即使在 ARC 下,我也有责任将它设置为 nil 吗?或者必须有其他东西保留数组中的一个对象,并防止它自动释放?
最佳答案
假设 NSMutableArray
是一个实例变量,它应该在 View Controller 被释放时被释放。如果您的 Controller 的 dealloc
在 NSMutableArray
只有 NSNull
对象时被调用,但是当您用“有意义的”填充数组时它没有被释放内容,这意味着您无疑拥有一个 strong reference cycle ,即 NSMutableArray
的内容中必须有一些对 View Controller 本身的引用。
关于iphone - 在 ARC 下将 NSArray 设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12646846/