Должен ли я сохранять, автоматически освобождать или ничего не делать при возврате NSArray executeFetchRequest: result?

Пожалуйста, посмотрите на код ниже:

- (NSArray *)requestEntities:(NSString *)entityName {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription
                               entityForName:entityName inManagedObjectContext:_context];

    [fetchRequest setEntity:entity]; 

    NSError *requestError = nil;

    NSArray *result = [_context executeFetchRequest:fetchRequest error:&requestError];

    [fetchRequest release], fetchRequest = nil;

    return result;
}

и мне нужно использовать результат где-то еще, в этом методе, результат возвращается правильно (без сохранения или авто-выпуска)? Кроме того, что должны делать вызывающие абоненты при получении результата, его сохранении или немедленном использовании?

Спасибо!

1 ответ

Решение

Соглашение состоит в том, что вы не несете ответственности за объекты, возвращаемые методами, отличными от содержащих new, alloc, или же copy, Заданный вами массив почти наверняка уже автоматически освобожден, поэтому он будет освобожден после завершения кода и возврата к циклу выполнения. Если вам нужно удерживать массив за этой точкой (например, если вы хотите сохранить эти результаты и сослаться на них, чтобы реагировать на будущие события пользовательского интерфейса), то вам следует сохранить массив, предпочтительно, назначив его сохраненному свойству.

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

Другие вопросы по тегам