如何从数组中释放对象?

时间:2011-01-11 15:37:43

标签: objective-c xcode nsmutablearray

我目前正在开发一个演示应用程序,所以我有点草率如何完成任务,但是我运行“构建和分析”以查看我得到了多少泄漏,......好吧,还有很多。

问题的根源是我有一个NSMutableArray并且我添加了一些对象:

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

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

有人可以给我一些建议吗?

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

替换

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

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

大多数集合(数组,字典)都拥有添加到它们的对象。而且,由于您已将+alloc发送到MyObject,因此您还拥有刚刚实例化的对象。正如内存管理规则所说,负责放弃拥有的对象的所有权。将-autorelease发送到新实例化的对象即可。