Знаете ли вы, что произойдет, если я сохраню автореализованный объект? Будет ли он выпущен или сохраняется выигрыш?iPhone - Что произойдет, если сохранить после автореферата?
ответ
Вы знаете, что произойдет, если я сохраняю autoreleased объект? Будет ли это выпущено или сохраняется выигрыш?
retain
«побеждает», но, думая об этом, он потерпел неудачу.
Сохранение и освобождение - это просто механизмы, посредством которых вы увеличиваете или уменьшаете количество удержаний объекта. Autorelease - это просто отсроченный релиз; Не больше, не меньше.
Если вы сохранили автореализованный объект, вы увеличиваете счетчик удержания СЕЙЧАС, пока количество удержания будет уменьшено. Это происходит все время; [NSString stringWithFormat: @"...."]
возвращает строку с автореализацией, которую вы retain
, если вы хотите, чтобы она придерживалась более [чаще всего] текущего прохождения цикла событий.
Если вы хотите сохранить свою переменную, вам необходимо , чтобы сохранить ее. Например:
myButton = [[UIButton buttonWithType:...] retain];
Метод buttonWithType:
возвращает UIButton
, который был инстанцированный с autorelease
. Он позаботится о том, чтобы освободить себя (если можно так выразиться), когда это необходимо.
Сохранение победит. Это очень распространено, и это исключенная практика.
Обычно удобные методы возвращают autoreleased объекты, такие как
[NSString stringWithFormat:@""];
Ожидается, что вы сохраняете любые объекты, которые нужно, так долго, как вы помните, чтобы выпустить их позже.
Помните, что автореализаторы произойдут в конце текущего системного сообщения.
Из приведенной ниже статьи: «для каждого сообщения, которое обрабатывается системой, и объекты в пуле создаются автоматически, после того, как обработка завершена».
Некоторые большие объяснения этого можно найти здесь:
http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html
Довольно хороший ответ, за исключением того, что автореферат (обязательно) не происходит при завершении текущего метода. Автореализованные объекты освобождаются только тогда, когда пул сливается, и это обычно происходит только после каждой поездки через цикл запуска. У ваших автореализованных объектов есть потенциал для долгого использования. – kubi
@kubi: Из статьи, опубликованной мной, «создается пул авторесурсов для каждого сообщения, которое обрабатывается системой, а объекты в пуле автоматически освобождаются после завершения обработки этого сообщения». Я не имел в виду текущее сообщение, я имел в виду текущее системное сообщение. Я исправлю свой пост. –
«Текущее системное сообщение» концептуально корректно, но более точный термин - «текущее событие», обычно «текущее событие, обработанное runloop».Обратите внимание, что очереди GCD также управляют пулом автозапуска в очереди (или более, в некоторых случаях), но дренаж гораздо менее детерминирован, чем цикл запуска. – bbum
- 1. Что произойдет, если «сохранить» NSArray или NSMutableArray?
- 2. Что произойдет, если action = ""?
- 3. Что произойдет, если я переустановить после нажатия?
- 4. Что произойдет, если NSURLCache заполнен?
- 5. Jarsigner - Что произойдет после истечения
- 6. Что произойдет, если отключить таймер?
- 7. Что произойдет, если * .exe.config удален?
- 8. Что произойдет, если stdin заполняется?
- 9. Что произойдет, если php.ini отсутствует?
- 10. Что произойдет, если клиент отключится?
- 11. Что произойдет, если ViewState Disabled
- 12. Что произойдет, если после формата с использованием printf нет параметров?
- 13. Что произойдет, если pthread_key_delete вызывается на ключ после неудачного pthread_key_create?
- 14. Что произойдет, если блок finally выдает исключение?
- 15. Что произойдет, если запись в localStorage отменена?
- 16. Что произойдет, если вы закрываете закрытое соединение?
- 17. Что произойдет, если вы прервите нажатие Git?
- 18. Что произойдет, если несколько скриптов устанавливают window.onload?
- 19. Что произойдет, если DBI :: mysql_enable_utf8 неправильно настроен?
- 20. Использование автореферата?
- 21. Что произойдет, если после загрузки части файла JSON произойдет сбой при загрузке задания большой загрузки?
- 22. В чем смысл сохранения сразу после автореферата?
- 23. Что произойдет, если доменный псевдоним заблокирован?
- 24. Что произойдет, если мой IExceptionPublisher выбрасывает исключение?
- 25. Что произойдет, если UITableViewCell не будет выпущен?
- 26. Что произойдет, если я не вызову session_start()?
- 27. Если контроллер кластера Eucalyptus разбивается, что произойдет?
- 28. Что произойдет, если вы присвоите значение $ _REQUEST?
- 29. Что произойдет, если я укоротить MSmerge_current_partition_mappings
- 30. Что произойдет, если XMLHttpRequest для загружаемого файла?
Простейший способ узнать это попробовать. изменять свой код, создавать и запускать. Расскажите нам свои выводы. %) –