关于ios:在Objective-C的ARC下,我对内存管理的责任是什么?

What is my responsibility for memory management under ARC of Objective-C?

本问题已经有最佳答案,请猛点这里访问。

正如我在ARC中所理解的,您不需要手动释放对象,而是自动为您释放对象。但我还有多少责任?我知道在方法的末尾,局部变量被自动设置为nil。但是强属性呢?我是否必须在deallocviewDidUnload等方法中将它们设置为nil?强属性是否自动释放?那么实例变量呢,它们和属性一样吗?我明白,并不是所有的记忆管理责任都由我承担。


基本上,编译器会为您添加保留和发布。当类释放locs时,它也会释放强引用。如果当时有一些代码需要运行,而您不需要(实际上不能)调用[super dealloc],那么您只需要编写一个dealoc方法。

但是:

I know that local variables are being setted to nil automatically at
the end of the method.

是不正确的。我认为您可能会将其与弱引用混淆,当它们指向的实例被释放时,弱引用被设置为零。

注意,objet指针的局部变量在方法开始时设置为nil。


强属性包括一个引用计数,当您的对象引用它们时,该计数会增加;当您将它们设置为nil(显式地,或者通过让您的对象准备好自动清理)时,它们的引用计数会减少。如果此时它们的引用计数为零,则也可以解除分配。

需要注意的是循环引用,例如对象A对对象B具有强引用,而对象B对对象A具有强引用。这是自动清理这些对象的问题。