在ARC下将NSArray设置为nil

时间:2012-09-28 20:18:53

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

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

当弹出此视图控制器时,不会释放当时NSMutableArray中的任何非空视图。因此,视图控制器本身也不会被释放。

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

是什么让这有必要?如果我创建它,即使在ARC下,将数组设置为nil总是我的责任吗?或者必须保留其他东西保留数组中的一个对象,并阻止它自动解除分配?

1 个答案:

答案 0 :(得分:1)

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