Выгрузка XIB из памяти - PullRequest
1 голос
/ 17 мая 2009

Итак, вот мои настройки:

  • Пользователь вращает PickerWheel, выбирает, к какому разделу приложения перейти.
  • Приложение загружает UIViewController из файла XIB и помещает его в стек навигационного контроллера
  • Пользователь может вернуться в любое время и выбрать другой раздел для перехода - viewController (как предполагается) полностью уничтожен и перераспределен для нового файла XIB

Это кажется простым, но каждый из этих разделов очень ресурсоемкий. Я не могу найти хороший способ полностью удалить XIB из памяти, когда они возвращаются назад - я пытаюсь просто вызвать [viewController release], и ​​пока он работает и в итоге вызывает метод - (void) dealloc подкласса UIViewController часть содержимого файла XIB по-прежнему остается в памяти (я вижу его там в ObjectAllocations и вижу много памяти, оставшейся в ActivityMonitor).

По сути, я спрашиваю, каков наилучший способ полностью удалить динамически загруженный XIB из памяти?

1 Ответ

6 голосов
/ 17 мая 2009
viewController.view = nil;

Если view равен нулю на управляемом NIB UIViewController, то он автоматически перезагрузит NIB при следующем запросе. Именно так работает -didReceiveMemoryWarning.

Поскольку я думаю об этом больше, это не сразу отбросит ваши IBOutlets, что в вашем случае, вероятно, имеет значение. Поэтому вам также необходимо реализовать специальное управление памятью для IBOutlets, описанное в Управление памятью объектов перьев .

Вам необходимо реализовать -setView:, как описано. Внимательно прочитайте весь этот документ. Я написал краткое изложение ключевых моментов в Управление памятью IBOutlets .

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