如果我有一個輔助方法,這就是增加了對象在我的自定義類的數組(NSMutableArray的),會是有意義的做之一:如果一個方法接受對象並添加到一個數組中,它是否應該在必要時檢測並釋放對象?
- 莫名其妙地自動檢測是否進入的對象已經被自動釋放?那麼如果在將其添加到數組後將其釋放?
- 在dealloc中迭代數組中的所有對象,並以某種方式檢查它們是否不需要被釋放,然後在釋放數組本身之後呢?
我所關心的是當我不得不釋放我的自定義類,包括數組時,我怎麼知道數組中的對象的狀態?
如果我有一個輔助方法,這就是增加了對象在我的自定義類的數組(NSMutableArray的),會是有意義的做之一:如果一個方法接受對象並添加到一個數組中,它是否應該在必要時檢測並釋放對象?
我所關心的是當我不得不釋放我的自定義類,包括數組時,我怎麼知道數組中的對象的狀態?
在處理其他對象內存的方法(除訪問器方法外)中,您不會執行任何操作。這是對象所有權的整體概念;因爲你的方法不擁有你傳入的對象,它不應該處理該對象的內存。 NSMutableArray將處理它在交易時包含的對象,除了在完成數組時釋放數組之外,您無需執行任何其他工作。
最簡單的規則 - 不時被提及 - 是你應該只釋放已明確分配(alloc),複製(copy),新建(new)或保留的對象(保留)。在你描述的場景中,你對任何事情都不負責任。如果你的方法沒有做上述四件事中的任何一件,那麼沒有什麼可擔心的。
這是內存管理的最大規則101 – 2011-05-24 23:41:48
莫名其妙地自動檢測傳入的對象是否已經autoreleased?那麼如果在將其添加到數組後將其釋放?
沒有 - 集保留他們添加的對象,然後當他們在dealloc的迭代去除
釋放他們通過陣列中的所有對象,並以某種方式檢查他們並不需要被釋放,並那麼在發佈這個數組之後呢?
沒有 - 集保留他們添加的對象,然後釋放他們時,他們被刪除
關注我的是,當我要的dealloc我的自定義類,包括陣列,我怎麼知道數組中對象的狀態?
集合將負責處理它,並在集合中保存對象的引用。 (當然)負責在陣列本身上調用release
時,持有它的對象將刪除或替換它(例如,在dealloc
中)。
它不應該需要知道。事實上,你的班級並不重要。如果調用代碼將對象標記爲自動釋放,則它不擁有自己的指針。如果它保留了對象,它擁有這些對象。你自己的幫手不需要知道這一點。 – BoltClock 2011-05-24 23:33:48