iphone - 在 ARC 下将 NSArray 设置为 nil

标签 iphone ios cocoa memory-management automatic-ref-counting

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

当弹出此 View Controller 时,不会释放当时 NSMutableArray 中的任何非空 View 。结果, View Controller 本身也没有被释放。

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

有什么必要这样做?如果我创建了一个数组,即使在 ARC 下,我也有责任将它设置为 nil 吗?或者必须有其他东西保留数组中的一个对象,并防止它自动释放?

最佳答案

假设 NSMutableArray 是一个实例变量,它应该在 View Controller 被释放时被释放。如果您的 Controller 的 deallocNSMutableArray 只有 NSNull 对象时被调用,但是当您用“有意义的”填充数组时它没有被释放内容,这意味着您无疑拥有一个 strong reference cycle ,即 NSMutableArray 的内容中必须有一些对 View Controller 本身的引用。

关于iphone - 在 ARC 下将 NSArray 设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12646846/

相关文章:

cocoa - 存储鼠标按下位置

objective-c - 在 Cocoa 中,如何将 QuartzComposer 补丁效果应用到 NSImage 上?

iPhone MapView 仅限于密苏里州

ios - 在 Apple Watch 上从 HealthKit 请求数据

iphone - 以特定顺序对 NSArray 的 NSString 进行排序

ios - header 搜索路径麻烦 Grabkit

Cocoa:将操作(复制:、粘贴:等)转发到响应者链

iPhone如何通过单击按钮连接网页

ios - 将栏按钮项目添加到 View Storyboard 中的导航栏

iphone - 如何将 self.title 与 Objective C 中的字符串进行比较?