Нечетные утечки памяти в CoreData - PullRequest
0 голосов
/ 16 февраля 2012

При окончательном тестировании моего приложения в Инструментах на наличие утечек я сталкиваюсь с 2 странными утечками:

Утечка объекта: _PFArray, #: 1 Адрес: 0x2a11c0 Размер: 32 байта1003 *

И

Утечка объекта: Malloc 16 байт, #: 1 Адрес: 0x24d6b0 Размер: 16 байтдо:

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

в CoreData Fetch.

И

[self.window makeKeyAndVisible];

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

Спасибо !!

РЕДАКТИРОВАТЬ:

Вот код вокруг массива записей.Записи - это просто 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];

1 Ответ

2 голосов
/ 16 февраля 2012

Вам необходимо освободить объект «records». И вам нужно освободить его после того, как вы закончили использовать его, НЕ в методе 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];
...