我在iOS中有一个关于ARC的快速问题。 (对不起,我已经问了很多这类问题,但我对内存管理感到困惑。)重要的是要注意我从未使用旧的内存维护系统(retain
,release
,assign
等等),所以我真的不知道这些术语的含义。
现在我很困惑我必须做些什么来确保正确释放强大的属性。例如,假设我正在创建一个学校应用程序,而我的School
对象包含对5个不同Child
个对象(不在数组中)的强属性引用。每个Child
对象都有一个到Book
对象的强指针(属性)。
如果我从我的学校中删除其中一个Child
对象(比如通过使其属性= nil,或者通过将我的属性更改为指向新对象),它的Book
是否会被正确释放?我该怎么做以确保是这种情况?我需要在self.myBook = nil
方法中编写dealloc
吗?如果Child
是View Controller,我需要在viewDidUnload方法中编写self.myBook = nil
吗?
我的目标只是iOS 5(及以上),因此旧的内存管理方式对我来说并不重要。
答案 0 :(得分:5)
如果我从我的学校中删除其中一个
Child
个对象(比如通过创建property = nil
,或者将我的属性更改为指向一个新对象),那么Book
是nil
妥善释放?
是的,只要没有其它强引用,它就会被释放。
我需要做些什么来确保是这种情况?
没有特别说明:当您将对象的引用设置为Book
时,ARC将减少对象的引用计数,看到该对象不再被引用,并继续删除它。它足够聪明,可以递归地处理被删除对象引用的项目,因此您不会泄漏任何内存。
您需要担心的一件事是循环引用:如果您的Child
具有对weak
的强烈反对引用,则要么引用该引用Book
,要么将其清除同时将nil
的引用设置为{{1}}(第二个选项容易出错,因此不建议这样做。)