Какую работу по очистке я должен выполнять, кроме dealloc в приложении для iPhone? - PullRequest
1 голос
/ 03 августа 2009

Прямо сейчас я выполняю большую часть своей работы по очистке в dealloc (очистка IBOutlets, выделенных объектов и т. Д.). В каких еще местах я должен выполнять работу по очистке, чтобы приложение хорошо работало? Не могли бы вы объяснить, что обычно делается в этих методах?

Например, viewDidUnload, applicationWillResignActive и т. Д.

Ответы [ 5 ]

1 голос
/ 28 октября 2009

Для представлений я обычно выпускаю все виджеты пользовательского интерфейса, которые были созданы из файла NIB в viewDidUnload. Любые модели или другие объекты, которые я очищаю в dealloc viewController.

Иногда у меня есть представления, которые создают модель (скажем, словарь имен разделов для строк раздела) из первичного объекта данных. Если я создаю / создаю объект в viewDidLoad, я освобождаю его в viewDidUnload (так как мой viewDidLoad будет вызван снова, когда придет время).

Я полагаю, что в SDK 3+ вам обычно не нужно беспокоиться о реализации didReceiveMemoryWarning напрямую, поскольку новый метод viewDidUnload является основным местом для очистки представления.

Для обычных объектов (объектов без особых жизненных циклов, как у контроллера представления) я просто отпускаю их членские переменные в dealloc.

0 голосов
/ 06 ноября 2009

Я бы использовал метод

[yourObject release]
, но заменил бы вашObject на объект
0 голосов
/ 16 октября 2009

Не забудьте:

- (void)didReceiveMemoryWarning
0 голосов
/ 24 октября 2009

Обратите внимание, что ваш вопрос некорректен. Метод -dealloc UIApplication никогда не вызывается. -dealloc делегата вашего приложения никогда не вызывается. Это означает, что любые объекты, сохраненные делегатом вашего приложения, никогда не будут освобождены, поэтому их dealloc никогда не вызывается.

Вы должны выполнять очистку в applicationWillTerminate вашего приложения-делегата: Поскольку ваше приложение умирает, вам на самом деле не нужно ничего делать, кроме как вернуть ресурсы, не связанные с памятью, убедитесь, что ваши файлы данных правильно закрыты, и что ваши NSUserDefaults синхронизированы, чтобы вы могли перезапустить правильно при следующем запуске.

Тем не менее, любой объект, который может быть выделен и освобожден многократно в течение срока действия программы, заслуживает правильного метода Oblocation C Oblocal, как описано в Apple, и это хорошая практика, чтобы написать это для всех ваших классов, даже если они не будет вызван, просто чтобы вы выработали хорошие привычки, и читатели не будут смущены. Кроме того, в будущем это избавит от проблем с обслуживанием, когда вы DO создадите и уничтожите несколько таких объектов, например, в своих модульных тестах.

0 голосов
/ 16 октября 2009

Примечание. Этот «ответ» имеет отношение только к выходу / завершению приложения.

В соответствии с ответом, который я получил на мой вопрос , даже не нужно вообще выполнять очистку, такую ​​как очистка IBOutlets, выделенных объектов и т. Д. Просто сохраняйте состояние (при необходимости), когда ваше приложение закрывается и пусть iPhone OS выполнит окончательную очистку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...