2012-02-15 42 views
-2

當最終在儀器測試我的應用程序是否泄漏,我碰到過2個奇數泄漏:奇CoreData內存泄漏

泄露的對象:_PFArray,#:1地址:0x2a11c0尺寸:32個字節負責圖書館:CoreData負責任的框架: newFetchedRowsForFetchPlan_MT

而且

泄露的對象:malloc的16個字節,#:1地址:0x24d6b0尺寸:16個字節負責圖書館:CoreData負責框架:newFetchedRowsForFetchPlan_MT

堆棧跟蹤˚F或者這兩個泄漏點指向:

records = [[self.managedObjectContext executeFetchRequest:request error:&error] retain]; 

在CoreData Fetch中。

而且

[self.window makeKeyAndVisible]; 

什麼是這些泄漏?我從來沒有見過他們。當我構建和分析時,它們不會彈出。有人有任何建議嗎?

謝謝!

編輯:

這裏是記錄陣列周圍的代碼。記錄只是在.h中聲明的NSarray。

/* 
Fetch existing events. 
Create a fetch request; find the Event entity and assign it to the request; add a sort descriptor; then execute the fetch. 
*/ 
marblebeingdragged=YES; 
NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Child" inManagedObjectContext:_managedObjectContext]; 
[request setEntity:entity]; 

// Order the events by creation date, most recent first. 
NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
NSSortDescriptor *prizeDescriptor = [[NSSortDescriptor alloc] initWithKey:@"prize" ascending:NO]; 
NSSortDescriptor *neededDescriptor = [[NSSortDescriptor alloc] initWithKey:@"marblesneeded" ascending:NO]; 
NSSortDescriptor *colorDescriptor = [[NSSortDescriptor alloc] initWithKey:@"color" ascending:NO]; 
NSSortDescriptor *reachedDiscriptor = [[NSSortDescriptor alloc] initWithKey:@"prizereached" ascending:NO]; 



NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:nameDescriptor,prizeDescriptor,neededDescriptor,colorDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[nameDescriptor release]; 
[colorDescriptor release]; 
[prizeDescriptor release]; 
[neededDescriptor release]; 
[reachedDiscriptor release]; 
[sortDescriptors release]; 

// Execute the fetch -- create a copy of the result. 
NSError *error = nil; 
records = [[self.managedObjectContext executeFetchRequest:request error:&error] retain]; 
+0

你釋放保留在完成後? – whitelionV 2012-02-15 23:51:55

+0

@whitelionV我在我的MainViewController的dealloc方法中釋放記錄。 – 2012-02-16 00:18:38

+0

我認爲你不必「保留」取得的結果。 – Kjuly 2012-02-16 00:53:32

回答

2

您需要釋放「記錄」對象。你需要在完成使用後釋放它,而不是在dealloc方法中。發佈更多的代碼。你是如何定義記錄的?如果您需要任何幫助,請發佈整個核心數據代碼塊。

records = [[self.managedObjectContext executeFetchRequest:request error:&error] retain]; 
//.... code using records 
[records release]; 

編輯:

要麼使用

records = [[self.managedObjectContext executeFetchRequest:request error:&error]]; // no retian 

或本

records = [[[self.managedObjectContext executeFetchRequest:request error:&error] retain] autorelease]; 
+0

我已經添加了整個代碼塊。另外,記錄數組在整個應用程序中都被編輯並保存到核心數據中。它應該只在視圖關閉時釋放。謝謝 – 2012-02-16 02:46:33

+0

不,我對記錄對象感興趣。它是.h文件中的保留屬性嗎?這是你分配的第一個地方嗎?無論如何嘗試在最後添加autorelease並看看。它應該解決這個問題,因爲我不知道你的代碼的相關部分。或刪除保留並嘗試self.records = [[self.managed ... – mbh 2012-02-16 03:05:39

+0

記錄數組被聲明爲:'@property(強,非原子)NSArray *記錄;' – 2012-02-16 03:27:14