[英]When do strong properties get released in ARC in iOS?
我對iOS中的ARC有一個快速的問題。 (對不起,我問了這么多這類問題,但是我對內存管理感到困惑。) 重要的是要注意,我從未使用過舊的內存維護系統( retain
, release
, assign
等),所以我真的不知道這些術語的含義。
現在,我對於確保正確釋放強屬性該怎么辦感到困惑。 例如,假設我正在制作一個學校應用程序,並且我的School
對象包含對5個不同Child
對象(不在數組中)的強屬性引用。 每個Child
對象都有一個Book
對象的強指針(屬性)。
如果我從學校中刪除了一個Child
對象(例如,通過使其屬性為nil或通過更改我的屬性以指向一個新對象),它的Book
會正確發布? 我必須怎么做才能確保是這種情況? 我是否需要在dealloc
方法中編寫self.myBook = nil
? 如果Child
是一個視圖控制器,我需要在viewDidUnload方法中編寫self.myBook = nil
嗎?
我僅針對iOS 5(及更高版本),因此舊的內存管理方式對我而言並不重要。
如果我從學校中刪除了一個
Child
對象(例如,通過使其property = nil
或通過更改我的屬性以指向一個新對象),那么其Book
會正確發布?
是的,只要沒有其他強引用,它將被發布。
我必須怎么做才能確保是這種情況?
沒什么特別的:將對象的引用設置為nil
,ARC將減少對象的引用計數 ,請參見不再引用該對象,然后繼續刪除它。 它足夠聰明,可以遞歸地處理從要刪除的對象中引用的項目,因此您不會泄漏任何內存。
您需要擔心的一件事是循環引用:如果您的Book
對Child
反向引用很強,則可以將該引用設為weak
,或者在將Book
的引用設置為nil
的同時清除該引用(第二種選擇)容易出錯,因此不建議使用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.