2012-02-15 3 views
-2

Когда окончательное тестирование моего приложения в инструментах на наличии утечек, я сталкиваюсь 2 нечетных протечки:Одд CoreData Утечки памяти

просочились объект: _PFArray, #: 1 Адрес: 0x2a11c0 Размер: 32 Bytes Ответственной библиотека: CoreData Ответственной Оправа: newFetchedRowsForFetchPlan_MT

И

просочились Объект: Malloc 16 байт, #: 1 Адрес: 0x24d6b0 Размер: 16 байт Ответственной библиотека: CoreData Ответственной Оправы: newFetchedRowsForFetchPlan_MT

стек следы п или оба утечки указывают на:

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

в выборке CoreData.

И

[self.window makeKeyAndVisible]; 

Каковы эти утечки? Я никогда их не видел. Они не появляются, когда я строю и анализирую. Есть ли у кого-нибудь предложения?

Спасибо!

EDIT:

Вот код вокруг массива записей. Записи - это просто NSarray, объявленный в .h.

/* 
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

+0

@whitelionV Я записываю записи в методе dealloc моего MainViewController. –

+0

Я думаю, что вам не нужно «сохранять» полученный результат. – Kjuly

ответ

2

Вам необходимо освободить объект «записи». И вам нужно освободить его после того, как вы закончите использовать его, а не в методе dealloc. Отправьте больше своего кода. Как вы определили записи? Отправьте весь блок кода основных данных, пожалуйста, если вы хотите получить какую-либо помощь.

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

Edit:

Либо использовать этот

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

ИЛИ это

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

Я добавил весь блок кода. Кроме того, массив записей редактируется и сохраняется в основных данных на всем моем приложении. Он должен быть выпущен только при закрытии представления. Спасибо –

+0

Нет, меня интересует объект записей. Является ли это сохраненным свойством в файле .h? что первое место, где вы выделяете? в любом случае попытайтесь добавить автореферат в конце и посмотреть. он должен решить проблему, так как у меня нет видимости для соответствующих частей вашего кода. Или удалите сохранение и попробуйте self.records = [[self.managed ... – mbh

+0

Массив записей объявлен как таковой: '@property (сильные, неатомические) NSArray * records;' –

Смежные вопросы