簡體   English   中英

何時在iOS的ARC中發布強屬性?

[英]When do strong properties get released in ARC in iOS?

我對iOS中的ARC有一個快速的問題。 (對不起,我問了這么多這類問題,但是我對內存管理感到困惑。) 重要的是要注意,我從未使用過舊的內存維護系統( retainreleaseassign等),所以我真的不知道這些術語的含義。

現在,我對於確保正確釋放強屬性該怎么辦感到困惑。 例如,假設我正在制作一個學校應用程序,並且我的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將減少對象的引用計數 ,請參見不再引用該對象,然后繼續刪除它。 它足夠聰明,可以遞歸地處理從要刪除的對象中引用的項目,因此您不會泄漏任何內存。

您需要擔心的一件事是循環引用:如果您的BookChild反向引用很強,則可以將該引用設為weak ,或者在將Book的引用設置為nil的同時清除該引用(第二種選擇)容易出錯,因此不建議使用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM