【发布时间】:2014-03-23 12:50:02
【问题描述】:
Profiling 告诉我们每次迭代都有一个MSVenue 对象泄漏,以及一个数组对象泄漏。
fetchedRecords 是一个从executeFetchRequest: 方法返回的数组,我确信它会返回一个自动释放的数组。
-(NSArray *)getSavedVenues
{
NSMutableArray *venues = [[@[] mutableCopy] autorelease];
for (Venues *venueManagedObject in fetchedRecords)
{
MSVenue *tmp = [[MSVenue alloc] init];
[tmp setID:venueManagedObject.venueID];
[tmp setName:venueManagedObject.venueName];
[venues addObject:tmp];
[tmp release];
tmp = nil;
}
return [NSArray arrayWithArray:venues];
}
【问题讨论】:
-
这个看起来很奇怪:
NSMutableArray *venues = [[@[] mutableCopy] autorelease];,你为什么不直接创建 NSMutable 数组的实例而不是创建 NSArray 的可变副本? -
@MykolaDenysyuk - 是的,我怀疑这是问题所在,但这有点愚蠢。
[NSMutableArray array]更清晰有效地完成同样的事情。 -
您的问题不清楚。我们是否看到了上述
for循环的迭代,或者这个方法之外的某个循环的迭代?上面的代码将在每次迭代中“累积”一个 MSVenue 对象,因为这就是您放置在数组中的内容。这是完全正常的。 -
@HotLicks as
@[]等于[NSArray new],会分配 NSArray,没有引用它,不是吗? -
您不使用 ARC 的任何特殊原因? (提示:启用 ARC)
标签: ios objective-c cocoa-touch memory-management memory-leaks