Я смотрю на какой-то открытый исходный код и пытаюсь понять, почему автор сделал что-то определенным образом.В чем смысл сохранения сразу после автореферата?
Класс является обертка NSArray
создать структуру стеки данных с толчком, поп и т.д.
Один метод topObject
который возвращает верхний объект в стеке и его реализация:
- (id)top {
return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}
Что происходит с сохранением, за которым следует немедленная автореферата?
Моя первоначальная реакция заключалась в том, что это предотвратило бы предупреждение анализатора о утечке памяти, но я проанализировал без сохранения/авторекламы, и предупреждения по-прежнему не было.
Рассматривая жизненный цикл, объект будет создан, перенесен в стек и выпущен, так что стек владеет объектом (базовый массив сохранит его при добавлении).
Так что я не понимаю, использование сохранения/autorelease здесь ...
Имеет смысл, спасибо. – Jasarien
Это все еще не правильно, что это imho. В Руководстве по программированию управления памятью указано: «Так же, как вы не должны беспокоиться о фактическом значении сохранения объекта, вы не должны беспокоиться о том, что объект, возвращаемый вам, автореализован или нет. Единственное, что вас беспокоит, не." - поэтому сохранение + автореклама должно происходить в foo = [верхняя панель]; line, а не в методе - (id) top {}. –
Хорошо объясненный ответ. –