Как раз тогда, когда я думал, что полностью понял эту тему, я вернулся к основам.Методы, которые вызывают методы: основы Autorelease?
У меня есть метод, который создает экземпляр autoreleased объект, используя (например) stringWithFormat
:
return [NSString stringWithFormat:@"what"];
Затем я называю этот метод из другого метода, а другой метод, каждый раз возвращать autoreleased NSString
и в каждом уровень иерархии. Код работает нормально, и экземпляр NSString
неповрежден на каждом уровне иерархии.
Я подумал что, так как экземпляр autoreleased, он может внезапно закончиться с retainCount
из 0 в любой точке в стеке вызовов (то есть, один из методов будет работать на выпущенном объекта). Верно ли, что я не могу зависеть от этого объекта?
Редактировать: Я понимаю, что вопрос был не слишком ясным. Сожалею. Я имею в виду:
Method1 ---calls---> Method2 ---calls---> Method3 ---instantiates the string--->
Вы, вероятно, никогда не увидите счет сохранения 0. Если у объекта есть значение удержания 1 при вызове выпуска, оно освобождается, а не уменьшается на счет сохранения. Кроме того, в примере stringWithFormat может быть достаточно умным, чтобы возвращать литерал, прошедший через него, поскольку в нем нет спецификаторов формата. – JeremyP
@JeremyP, хорошая точка о том, что показатели сохранения никогда не достигают нуля. С другой стороны, мой первоначальный пример был фактически «return @», что «;», что и в этом примере, я думаю. –