我目前正在开发一个演示应用程序,所以我有点草率如何完成任务,但是我运行“构建和分析”以查看我得到了多少泄漏,......好吧,还有很多。
问题的根源是我有一个NSMutableArray并且我添加了一些对象:
NSMutableArray *arr = [[NSMutableArray alloc] init];
[arr addObject:[[MyObject alloc] initWithText:@"Option1"]];
// I have like 100 lines like that and 100 complains
现在,xcode抱怨潜在的泄漏。
有人可以给我一些建议吗?
感谢。
答案 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
发送到新实例化的对象即可。