2011-01-19 85 views
0
[myArray addObject:myObject]; 
[object release]; 

在obvjective c中,每次將保留數爲1的對象添加到數組時,必須立即釋放它以防止泄漏。核心數據 - 內存管理?

這是否適用於NSManagedObjects? 因爲在上面,如果myObjectNSManagedObject一個實例,碰到「EXC_BAD_ACCESS」

回答

2

請閱讀Memory Management Programming Guide。它將回答這個問題以及你將來遇到的任何內存管理問題。

要直接回答此問題:您必須擁有releaseautorelease對象。您必須而不是releaseautorelease您不屬於的對象。當您撥打retain或使用alloc/new/copy獲取對象時,您擁有一個對象。

將一個對象添加到數組中時肯定沒有關於releasing的一攬子規則。

+0

謝謝,所以我想通了,我沒有自己的NSManagedObject實例,所以我不想釋放它。 – aryaxt 2011-01-19 00:58:40

0

你的毯子語句的代碼釋放對象是絕對錯誤的。事實上,即使考慮對象的保留數量也是錯誤的。如果你擁有一個對象,並且你正在放棄對擁有對象的引用,那麼你必須釋放它。這是基本規則。如果你不擁有這個對象,你就沒有業務發佈它。有關更多詳細信息,請閱讀Cocoa Memory Management Programming Guide

至於你的核心問題是「核心數據對象的內存管理與其他所有東西一樣嗎?」,答案是肯定的。核心數據本身擁有各種對象,並且存在一些錯綜複雜的行爲,但所有權規則與Cocoa其餘部分完全相同。