2011-07-07 54 views
1

的分析功能告訴我,有一個在這裏mutableFetchResults一個潛在的泄漏:當我解決這個潛在的泄漏與autorelease我的應用程序崩潰,爲什麼?

- (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 ; 

}

喜歡這個工作,但有一個泄漏警告。
當我使用autorelease 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

getBookmarks如何被調用?是否有被調用的另一個自動釋放池,例如來自UI事件創建的新線程? – bdowden

+0

不,我沒有創建另一個池,只是標準池。增加了getBookmaks調用。 – madmax

回答

1

一個保留計數需要保留要保持周圍任何一個副本,因此您init方法需要保留的書籤:

bookmarks = [[coreDataManager getBookmarks] retain]; 

然後你就可以自動釋放在返回之前,mutableFetchResults變量。

此外,可可命名約定將有getBookmarks方法名爲bookmarks。 :)

+0

根據getBookmarks代碼,它返回一個mutableCopy對象。 – AechoLiu

+1

@Toro是的,但據我瞭解OP想要返回自動釋放對象的問題。這也應該是這樣,所以'mutableFetchResults'變量應該是自動釋放的,'init'方法中的'bookmarks'變量需要保留它。 –

+0

autorelease並保留,就是這樣! ;-) – madmax

0

你是什麼意思時,你說:

When I use autorelease NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; my app crashes without an error log.

...有沒有自動釋放存在。 mutableCopy保留您的陣列的與1

+0

是的,我的意思是當我添加它。對不起 – madmax

相關問題