簡體   English   中英

如果我釋放 NSMutableArray,如果它們的 retainCount 大於 1,數組中的對象會發生什么?

[英]if i release NSMutableArray is released, what happens to the objects in the array if their retainCount is greater then 1?

如果我有一個保留計數為 1 的 NSMutableArray,並且該數組有多個 class A 對象,其變量的保留計數大於 1,如果我釋放數組,這些變量會發生什么情況? 他們是被迫釋放每個保留的計數並釋放空間,還是仍會占用 memory?

釋放數組與從數組中刪除所有項具有相同的效果。 也就是說,該陣列不再聲稱擁有它們。 如果其他人保留了這些對象,它們將繼續存在。 如果沒有,它們將被釋放。

這只是正常的 memory 規則集。 如果您保留 object,則必須釋放它。 相反,其他代碼位(如數組)也可以在想要擁有它時保留和釋放 object,但如果每個人都遵守規則,沒有人會感到驚訝。

retain調用視為 +1,將release調用視為 -1。 您對釋放NSArray的調用會釋放NSArray ,然后又會向它持有的每個項目發送一個release ,但是由於NSArray在您添加它們時對它們進行了retain ,所以它只是平衡其retain / release調用。

通常最好集中精力平衡您的retainrelease調用,而不是想象在任何特定時間保留計數將是多少。

當您發送該版本時,您的數組將被釋放,因為 retainCount==0。 當您的程序取消分配集合類型 object(如數組)時,它將對集合中的所有對象執行釋放。 發布所做的只是減少保留計數。 直到retainCount==0 才會發生重新分配。 所以如果你的數組中的對象有一個retainCount==2,那么在數組被釋放后它們將有一個retainCount==1。 如果沒有其他變量引用這些對象中的任何一個,那么它們將繼續存在,因為 memory 泄漏。

嚴格來說,當retainCount為 1 並且您釋放數組時,數組將被“釋放”。 並且在數組被釋放之前,數組將向數組中的每個元素發送release消息。 我想你可以想象 rest。

暫無
暫無

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

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