Что такое точка в сохранении сразу после последующей авторелез?
-
30-09-2019 - |
Вопрос
Я смотрю на какой-то открытый исходный код и пытаясь понять, почему автор сделал что-то определенное.
Класс - это обертка вокруг NSArray
Чтобы создать структуру данных стека с толчком, поп и т. Д.
Один метод есть topObject
который возвращает самый верхний объект в стеке и его реализацию:
- (id)top {
return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}
Что с сохранением, а затем непосредственно авторелез?
Моя начальная реакция заключалась в том, что это предотвратит предупреждение анализатора о утечке памяти, но я проанализировал без сохранения / авторелез, и все еще не было предупреждено.
Глядя на жизненный цикл, будет создан объект, толкает в стек и выпущен, поэтому стек владеет объектом (основной массив сохранит его при добавлении).
Поэтому я не понимаю использование сохранения / авторелез здесь ...
Решение
Давайте предположим top
будет выглядеть так:
- (id) top {
return [stack lastObject];
}
Тогда представьте себе это:
foo = [bar top];
[bar removeAllObjects];
// Do something with foo
Произойдет следующее: вторая строка сделает удержание укажению в 0, а на третьей строке foo
будет указывать на DealLocated Memory. Но с retain
а также autorelease
Количество сохранения 1, до тех пор, пока пул не будет опустошен на третью строку foo
все равно укажет на действительный объект.