Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在ARC中释放强参考_Ios_Memory Management_Automatic Ref Counting - Fatal编程技术网

Ios 在ARC中释放强参考

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不再使用,因此这不是一个选项。其次,当类被释放时,您不需要手动清除它的

我的项目已启用ARC。我有一个类,它是NSObject的直接子类,我的类有一个NSArray(强引用)。如何释放阵列

我的理解

  • 在ARC中,无需释放对象

  • 在dealloc方法中将nil设置为my NSArray(强引用)

  • 在视图控制器的情况下,在viewDidUnload中将nil设置为my NSArray(强引用)

  • 这是释放我的NSArray的正确方法吗?如果不是,那么正确的方法是什么?

    因此,首先,
    viewDidUnload
    不再使用,因此这不是一个选项。其次,当类被释放时,您不需要手动清除它的实例变量,除非它们需要一些特殊的清理。当一个对象被解除分配时,它会释放其所有实例变量的所有权,因此只要没有其他对象用强引用指向它们,它们就会被自动解除分配。因此,正如你所要求的那样,正确的方法是什么也不做。一旦对象解除分配,数组将自行解除分配

    也就是说,如果确实需要,可以如下方式清除指向数组的指针:

    myArray = nil;
    

    如果没有其他强引用指向该数组,则这将取消分配该数组,从而取消分配数组中没有其他强引用指向它们的任何元素。

    将指针设置为nil并不一定取消分配它-arc可以选择使用自动释放-AFAIK它不保证正确,不保证它是释放还是自动释放,但无论哪种方式,保留计数最终都会下降(最终)。不过,这是一个很好的观点,谢谢。@Dima谢谢。你不会接到电话吗?但当内存警告出现时,viewdidunload会被调用,对吗?在那个时候我们应该设置为零吗?您说过,它释放了所有实例变量的所有权,所以只要没有其他变量指向它们,它们就会被自动释放。这意味着,如果任何其他类(创建的类除外)对myArray具有强引用,那么它将不会发布?
    viewDidUnload
    在iOS 6中被弃用,并且永远不再被调用。文档声明“在iOS 6.0中已弃用。在内存不足的情况下,视图不再被清除,因此永远不会调用此方法。”。是的,如果其他人拥有该阵列,那么它将不会被解除分配。这就是引用的工作原理。