Ios 在ARC中释放强参考
我的项目已启用ARC。我有一个类,它是NSObject的直接子类,我的类有一个NSArray(强引用)。如何释放阵列 我的理解Ios 在ARC中释放强参考,ios,memory-management,automatic-ref-counting,Ios,Memory Management,Automatic Ref Counting,我的项目已启用ARC。我有一个类,它是NSObject的直接子类,我的类有一个NSArray(强引用)。如何释放阵列 我的理解 在ARC中,无需释放对象 在dealloc方法中将nil设置为my NSArray(强引用) 在视图控制器的情况下,在viewDidUnload中将nil设置为my NSArray(强引用) 这是释放我的NSArray的正确方法吗?如果不是,那么正确的方法是什么?因此,首先,viewDidUnload不再使用,因此这不是一个选项。其次,当类被释放时,您不需要手动清除它的
这是释放我的NSArray的正确方法吗?如果不是,那么正确的方法是什么?因此,首先,
viewDidUnload
不再使用,因此这不是一个选项。其次,当类被释放时,您不需要手动清除它的实例变量,除非它们需要一些特殊的清理。当一个对象被解除分配时,它会释放其所有实例变量的所有权,因此只要没有其他对象用强引用指向它们,它们就会被自动解除分配。因此,正如你所要求的那样,正确的方法是什么也不做。一旦对象解除分配,数组将自行解除分配
也就是说,如果确实需要,可以如下方式清除指向数组的指针:
myArray = nil;
如果没有其他强引用指向该数组,则这将取消分配该数组,从而取消分配数组中没有其他强引用指向它们的任何元素。将指针设置为nil并不一定取消分配它-arc可以选择使用自动释放-AFAIK它不保证正确,不保证它是释放还是自动释放,但无论哪种方式,保留计数最终都会下降(最终)。不过,这是一个很好的观点,谢谢。@Dima谢谢。你不会接到电话吗?但当内存警告出现时,viewdidunload会被调用,对吗?在那个时候我们应该设置为零吗?您说过,它释放了所有实例变量的所有权,所以只要没有其他变量指向它们,它们就会被自动释放。这意味着,如果任何其他类(创建的类除外)对myArray具有强引用,那么它将不会发布?
viewDidUnload
在iOS 6中被弃用,并且永远不再被调用。文档声明“在iOS 6.0中已弃用。在内存不足的情况下,视图不再被清除,因此永远不会调用此方法。”。是的,如果其他人拥有该阵列,那么它将不会被解除分配。这就是引用的工作原理。