+ (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];
}
我想问一下,这个功能是否会泄漏内存?实际上乐器说这个功能正在泄漏地狱。
请帮我解决内存问题?
答案 0 :(得分:1)
如果您需要查看对象使用仪器的保留,释放和自动释放的位置:
在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致问题代码运行,停止记录,搜索感兴趣的ivar,向下钻取,您将能够看到所有保留,释放和自动释放发生的位置。
以下是使用ARC for iOS 4.3及更高版本的简化版本:
+ (NSArray *) fetchAllContactsInContext:(NSManagedObjectContext *)aContext {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Contact"];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
[request setSortDescriptors:@[sortDescriptor]];
NSError *fetchError;
NSArray *results = [aContext executeFetchRequest:request error:&fetchError];
if (results == nil){
NSLog(@"Contact - Error fetching contacts %@", [fetchError localizedDescription]);
}
return results;
}
答案 1 :(得分:0)
为什么[_fetchError release];
存在?
你为什么不使用ARC?
尝试将此代码重构为ARC。