Что такое точка в сохранении сразу после последующей авторелез?

StackOverflow https://stackoverflow.com/questions/3943040

Вопрос

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

Класс - это обертка вокруг 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 все равно укажет на действительный объект.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top