analyze函数告诉我mutableFetchResults
这里有潜在的泄漏:
- (NSMutableArray *) getBookmarks
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Bookmark" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
[request release];
if (!mutableFetchResults) {
NSLog(@"Error with fetch: %@", error );
return nil;
}
return mutableFetchResults ;
}
像这样有效,但有泄漏警告
当我使用自动释放NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
我的应用程序崩溃而没有错误日志
我怎样才能在这里找到问题?
- (id)init
{
self = [super init];
if (self) {
coreDataManager = [[CoreDataManager alloc] initWithDelegate:self];
bookmarks = [coreDataManager getBookmarks];
}
return self;
}
答案 0 :(得分:1)
您需要保留任何想要保留的内容,因此init
方法需要保留书签:
bookmarks = [[coreDataManager getBookmarks] retain];
然后,您可以在返回之前自动释放mutableFetchResults
变量。
此外,Cocoa命名约定将具有名为getBookmarks
的{{1}}方法。 :)
答案 1 :(得分:0)
当你说:
时,你是什么意思当我使用autorelease时NSMutableArray * mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:& error] mutableCopy];我的应用程序在没有错误日志的情况下崩溃。
......那里没有自动释放。 mutableCopy
会保留数组的副本,保留计数为1.