2010-11-29 28 views
0

我有一個函數返回從CoreData中獲取的NSMutableArrayiPhone iOS使用函數從CoreData中檢索NSMutableArray

- (NSMutableArray*)getArray:(NSString*)entityName withDescriptor:(NSString*)descriptorKey { 
    NSError **error = nil; 
    NSEntityDescription *entityDescription = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]; 
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
    [request setEntity:entityDescription]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:descriptorKey ascending:YES]; 
    [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
    [sortDescriptor release]; 

    return [[managedObjectContext executeFetchRequest:request error:error] mutableCopy]; 
} 

當我Build and Analyze包含這個功能我的項目,我收到了分析結果說,有在線路分配對象的潛在泄漏X(該行是它返回可變複印件)

我調用這個函數是這樣的:

myArray = [self getArray:ENTITY_PAGES withDescriptor:DEFAULT_DESCRIPTOR]; 

其中myArray是類的NSMutableArray的財產,ENTITY_PAGESDEFAULT_DESCRIPTOR是NSString的常量

我希望在多個地方使用此功能,這樣我就可以減少項目中的冗餘數量。

我應該如何從Core Data使用這樣的功能填充myArray而不會導致這些分析儀問題?

回答

2

分析儀抱怨一個潛在的內存泄漏,因爲你的函數違反了一個Objective-C的內存管理規則:

如果使用名稱以「黃金的方法創建你需要一個對象的所有權「或」new「或包含」copy「(例如,alloc,newObject或mutableCopy),或者如果您發送它爲保留消息。

更改你的函數的名稱(並確保你釋放返回的數組),分析器應該停止抱怨。

這裏是鏈接到的內存管理指南:

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

+0

我接着說:autorelease`後`mutableCopy`和分析儀沒有抱怨。我不知道你的意思是「適當地改變你的功能的名稱」。告訴我什麼是合適的?! ha – binnyb 2010-11-29 22:07:20