Должен ли я сохранять, автоматически освобождать или ничего не делать при возврате 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
, Заданный вами массив почти наверняка уже автоматически освобожден, поэтому он будет освобожден после завершения кода и возврата к циклу выполнения. Если вам нужно удерживать массив за этой точкой (например, если вы хотите сохранить эти результаты и сослаться на них, чтобы реагировать на будущие события пользовательского интерфейса), то вам следует сохранить массив, предпочтительно, назначив его сохраненному свойству.
Я настоятельно рекомендую вам полностью прочитать руководство по программированию управления памятью или, по крайней мере, первые несколько разделов, в которых дается полное представление о том, о чем вы спрашиваете.