2011-01-19 86 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其余部分完全相同。