2011-01-11 73 views
0

我目前正在研究一个演示应用程序,所以我有点sl how如何完成任务,但是我运行“构建和分析”来查看我得到了多少泄漏,......以及有很多。如何从数组中释放对象?

德proble的来源是,我有一个NSMutableArray的,我的一些对象添加到它:

NSMutableArray *arr = [[NSMutableArray alloc] init]; 
[arr addObject:[[MyObject alloc] initWithText:@"Option1"]]; 
// I have like 100 lines like that and 100 complains 

现在,Xcode的抱怨潜在的泄漏。

有人可以给我一些建议如何处理?

谢谢。

+0

您拥有您创建的任何对象(http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043- SW1)你是否在任何时候发布arr?最后,你会更好地创建你的对象,除了addObject方法,传递它在addObject中,然后释放它(请参阅这里的答案:http://stackoverflow.com/questions/179665/nsmutablearray-destruction更多) – ndtreviv 2011-01-11 15:45:23

回答

3

问题是您正在分配一个您有责任发布的实例MyObject。当你将它传递给数组时,数组也会保留这个对象,所以现在你和数组都必须释放它。您可以简单地使用autorelease对象,并且数组将保留它,直到从数组中移除对象或销毁数组本身。

2

更换

[arr addObject:[[MyObject alloc] initWithText:@"Option1"]]; 

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"] autorelease]]; 

大多数集合(数组,字典)自己加入到它们的对象。而且,由于您已将+alloc发送到MyObject,因此您也拥有刚被实例化的对象。正如内存管理规则所说,负责放弃对象所有权你自己。发送-autorelease到新实例化的对象将做到这一点。