什么时候在iOS中的ARC中发布强大的属性?

时间:2012-06-21 15:32:54

标签: objective-c ios automatic-ref-counting

我在iOS中有一个关于ARC的快速问题。 (对不起,我已经问了很多这类问题,但我对内存管理感到困惑。)重要的是要注意我从未使用旧的内存维护系统(retainreleaseassign等等),所以我真的不知道这些术语的含义。

现在我很困惑我必须做些什么来确保正确释放强大的属性。例如,假设我正在创建一个学校应用程序,而我的School对象包含对5个不同Child个对象(不在数组中)的强属性引用。每个Child对象都有一个到Book对象的强指针(属性)。

如果我从我的学校中删除其中一个Child对象(比如通过使其属性= nil,或者通过将我的属性更改为指向新对象),它的Book是否会被正确释放?我该怎么做以确保是这种情况?我需要在self.myBook = nil方法中编写dealloc吗?如果Child是View Controller,我需要在viewDidUnload方法中编写self.myBook = nil吗?

我的目标只是iOS 5(及以上),因此旧的内存管理方式对我来说并不重要。

1 个答案:

答案 0 :(得分:5)

  

如果我从我的学校中删除其中一个Child个对象(比如通过创建property = nil,或者将我的属性更改为指向一个新对象),那么Booknil妥善释放?

是的,只要没有其它强引用,它就会被释放。

  

我需要做些什么来确保是这种情况?

没有特别说明:当您将对象的引用设置为Book时,ARC将减少对象的引用计数,看到该对象不再被引用,并继续删除它。它足够聪明,可以递归地处理被删除对象引用的项目,因此您不会泄漏任何内存。

您需要担心的一件事是循环引用:如果您的Child具有对weak的强烈反对引用,则要么引用该引用Book,要么将其清除同时将nil的引用设置为{{1}}(第二个选项容易出错,因此不建议这样做。)