iPhone - что произойдет, если сохранить после автоматического выпуска? - PullRequest
0 голосов
/ 16 января 2011

Знаете ли вы, что произойдет, если я сохраню автоматически выпущенный объект?Будет ли он выпущен или победит удержание?

Ответы [ 3 ]

7 голосов
/ 16 января 2011

Вы знаете, что произойдет, если я сохраню авто-выпущенный объект? Это случится освобожден или удерживает выигрыш?

retain "побеждает", но если думать об этом, то это полный провал.

сохранение и освобождение - это просто механизмы, с помощью которых вы увеличиваете или уменьшаете количество сохраняемых объектов. Авто-релиз - просто отложенный выпуск; не больше, не меньше.

Если вы сохраняете автоматически выпущенный объект, вы увеличиваете количество сохраняемых СЕЙЧАС, в то время как количество сохраняемых уменьшается ПОЗЖЕ. Это происходит все время; [NSString stringWithFormat: @"...."] возвращает автоматически выпущенную строку, которую вы retain хотите, чтобы она оставалась вне [наиболее типично] текущего прохода через цикл обработки событий.

2 голосов
/ 16 января 2011

Задержка выиграет. Это очень распространено и является исключительной практикой.

Обычно удобные методы возвращают автоматически выпущенные объекты, такие как

[NSString stringWithFormat:@""];

Ожидается, что вы сохраните все объекты, которые вам нужны, если вы не забудете их отпустить позже.

Помните, что автоматические выпуски будут происходить в конце текущего системного сообщения.

Из статьи ниже: «Пул автоматического выпуска создается для каждого сообщения, обрабатываемого системой, и все объекты в пуле автоматически освобождаются после завершения обработки этого сообщения».

Некоторые замечательные объяснения этому можно найти здесь:

http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html

2 голосов
/ 16 января 2011

Если вы хотите сохранить свою переменную, вам нужно , чтобы сохранить ее. Например:

myButton = [[UIButton buttonWithType:...] retain];

Метод buttonWithType: возвращает UIButton, для которого был создан экземпляр autorelease. Он позаботится о том, чтобы выпустить себя (так сказать), когда это необходимо.

...