5

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

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

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

我只针对 iOS 5(及更高版本),所以旧的内存管理方式对我来说并不重要。

4

1 回答 1

5

如果我Child从学校中移除其中一个对象(例如通过制作它property = nil,或者通过更改我的属性以指向一个新对象),它Book会被正确释放吗?

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

我该怎么做才能确保是这种情况?

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

您必须担心的一件事是循环引用:如果您Book对 有很强的反向引用,请Child进行该引用,或者在将引用设置为toweak的同时将其清除(第二个选项容易出错,因此不推荐)。Booknil

于 2012-06-21T15:39:30.747 回答