Проблема утечки памяти в коде Core Data - PullRequest
1 голос
/ 09 июля 2011

Я не могу понять причину проблемы, о которой сообщает инструмент Leaks. Данный код находится здесь с помеченной строкой проблемы. Есть идеи? Есть ли способ выяснить, к какому именно объекту относится утечка?

NSArray *getAllCoreData(NSString *entityName, NSString *orderedBy, BOOL ascending, BOOL shallow)
{
// Get the managed object context
NSManagedObjectContext *moc = [[AppController sharedAppController] managedObjectContext];

// Create a fetch request that fetches from 'entityName'
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:moc];
[fetch setEntity:entity];

// Try to do the fetch
NSError *error;
NSArray *result = [moc executeFetchRequest:fetch error:&error]; <----- Problem line

[fetch release];

// Did the fetch fail?
if (!result)
{
    // Display an alert view
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Fetch Failed"
                                                        message:[error localizedDescription] 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles:nil];

    [alertView autorelease];
    [alertView show];
    return nil;
}

// Return the array of instances of NSManagedObject
return result;
}

Любая помощь будет принята с благодарностью, Джейсон

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Попробуйте изменить

NSError *error;

на

NSError *error = nil;

Возможно, это не настоящая утечка.Возможно, у NSError *error просто есть какой-то остаточный указатель, так что это похоже на утечку в инструмент.

1 голос
/ 09 июля 2011

Утечки говорят вам, что память, выделенная там, была сохранена после того, как у вас больше не было ссылок.

Таким образом, после того, как вы вернете результаты, что-то еще удерживает их слишком долго и не отпускает, когда вы закончите.

...