【发布时间】:2012-12-12 12:20:23
【问题描述】:
+ (NSArray *) fetchAllContactsInContext:(NSManagedObjectContext *)a_context
{
NSFetchRequest *_request = [[NSFetchRequest alloc] init];
[_request setEntity:[NSEntityDescription entityForName:@"Contact" inManagedObjectContext:a_context]];
NSSortDescriptor *_sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSArray *_sortDescriptors = [[NSArray alloc] initWithObjects:_sortDescriptor, nil];
[_request setSortDescriptors:_sortDescriptors];
NSError *_fetchError=nil;
NSArray *_results = [[NSArray alloc] initWithArray:[a_context executeFetchRequest:_request error:&_fetchError]];
[_sortDescriptor release];
[_sortDescriptors release];
[_request release];
if (_fetchError){
NSLog(@"Contact - Error fetching contacts %@", [_fetchError localizedDescription]);
}
[_fetchError release];
return [_results autorelease];
}
我想问一下,这个函数是不是内存泄露了?实际上 Instruments 是说这个函数正在泄漏大量内存。
你能帮我解决内存问题吗?
【问题讨论】:
-
注意:不要测试
_error来判断是否有错误,测试_results,如果没有错误则无法保证值..还有,这几天前导下划线“ _" 通常只用于 iVar,这有助于其他人阅读您的代码。当然,对于 ARC,所有这些都是名词问题。 -
我认为你不需要发布
_fetchError。否则,任何调用 this 都可能导致返回值泄漏。尝试运行 Product->Analyze 以查看是否有警告...或切换到 ARC。 :-)
标签: objective-c memory-management memory-leaks instruments