[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