Почему освобождение моего контекста / сущности CoreData приводит к сбою приложения? - PullRequest
0 голосов
/ 16 марта 2011

У меня есть простое приложение CoreData, которое позволяет добавлять элементы в список, отображаемый в виде таблицы.Когда пользователь вводит новый элемент, вызывается следующий метод:

- (void)addNewItem:(NSString *)item
{
    // Create a new instance of the entity managed by the fetched results controller.
    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    Item *newItem = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

    [newItem setName:item];

    // Save the context.
    NSError *error = nil;
    if (![context save:&error])
    {
        //error handling code
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    [context release];
    [entity release];
    [newItem release];

Приложение всегда позволяет добавить один элемент в список, но затем вылетает при попытке добавить второй.Если я удалю «[newItem release];», приложение позволит вам добавить 4 элемента списка, а затем внезапно завершит работу, когда вы попытаетесь ввести пятый элемент.все три из этих операторов release в конце метода удаляются.Кто-нибудь может объяснить, почему?

Ответы [ 2 ]

6 голосов
/ 16 марта 2011

Все объекты автоматически высвобождаются (потому что вы никогда не alloc init ничего), поэтому вы не должны выпускать их сами Насколько я могу судить, когда произойдет сбой вашего приложения, это не предсказуемо, но в конечном итоге произойдет сбой.

3 голосов
/ 16 марта 2011

Просто чтобы уточнить ответ @ BoltClock.Это не только alloc, init, но также new..., copy... и т. Д.

Вам следует прочитать Руководство по управлению памятью , особенно Управление памятьюПравила .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...