[myArray addObject:myObject];
[object release];
在obvjective c中,每次將保留數爲1的對象添加到數組時,必須立即釋放它以防止泄漏。核心數據 - 內存管理?
這是否適用於NSManagedObjects? 因爲在上面,如果myObject
是NSManagedObject
一個實例,碰到「EXC_BAD_ACCESS」
[myArray addObject:myObject];
[object release];
在obvjective c中,每次將保留數爲1的對象添加到數組時,必須立即釋放它以防止泄漏。核心數據 - 內存管理?
這是否適用於NSManagedObjects? 因爲在上面,如果myObject
是NSManagedObject
一個實例,碰到「EXC_BAD_ACCESS」
請閱讀Memory Management Programming Guide。它將回答這個問題以及你將來遇到的任何內存管理問題。
要直接回答此問題:您必須擁有release
或autorelease
對象。您必須而不是release
或autorelease
您不屬於的對象。當您撥打retain
或使用alloc
/new
/copy
獲取對象時,您擁有一個對象。
將一個對象添加到數組中時肯定沒有關於releasing
的一攬子規則。
你的毯子語句的代碼釋放對象是絕對錯誤的。事實上,即使考慮對象的保留數量也是錯誤的。如果你擁有一個對象,並且你正在放棄對擁有對象的引用,那麼你必須釋放它。這是基本規則。如果你不擁有這個對象,你就沒有業務發佈它。有關更多詳細信息,請閱讀Cocoa Memory Management Programming Guide。
至於你的核心問題是「核心數據對象的內存管理與其他所有東西一樣嗎?」,答案是肯定的。核心數據本身擁有各種對象,並且存在一些錯綜複雜的行爲,但所有權規則與Cocoa其餘部分完全相同。
看代碼:
[myArray addObject:myObject];
[object release]; //!!!What is object?
你是什麼意思?
[myArray addObject:myObject];
[myObject release];
而Cocoa Memory Management Programming Guide是必讀。 如果你不想讀整件事情,Memory Management Rules是最重要的部分。
通常,在使用Core Data時,您將應用相同的內存管理規則,但有some caveats。
謝謝,所以我想通了,我沒有自己的NSManagedObject實例,所以我不想釋放它。 – aryaxt 2011-01-19 00:58:40