Должен ли я сохранять, автоматически высвобождать или ничего не делать при возврате NSArray executeFetchRequest: result? - PullRequest
1 голос
/ 15 июля 2011

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

- (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 Ответ

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

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

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

...