#iphone #objective-c #ios #cocoa-touch #uikit
#iPhone #objective-c #iOS #cocoa-touch #uikit
Вопрос:
У меня есть пользовательский элемент управления, такой как панель вкладок, который отображает множество контроллеров, некоторые из них также имеют мою панель вкладок с другими контроллерами, поэтому мое приложение использует много памяти, потому что каждый контроллер хранится в памяти. Итак, я хочу выгрузить невидимый контроллер, но я не нашел никакого способа выгрузки UIViewController. Как я могу это сделать?
PS. Я не могу использовать UITabBarController, действительно не могу.
Ответ №1:
Вы этого не делаете. UIViewControllers не выгружаются при нехватке памяти, только их представления.
Это происходит в didReceiveMemoryWarning
ваших собственных контроллерах представления и вызывается автоматически при появлении предупреждения о нехватке памяти.
Переопределите это и выгрузите все, что можно воссоздать viewDidLoad
.
Ответ №2:
Удалите представление view controllers из его супервизора и отпустите контроллер. Работа выполнена.
Комментарии:
1. Это не подходит, мне нужно сохранить данные контроллера — загрузка контроллера из интернет-данных, и если загрузка будет происходить каждый раз, когда пользователь будет ожидать. Переделать на более MVC-версию я не могу, приложение слишком большое.
2. В этом случае представления автоматически выгружаются при передаче предупреждения didReceiveMemoryWarning, но теперь вы должны очистить что-либо в viewDidUnload, которое вы воссоздадите в viewDidLoad.
Ответ №3:
Я знаю, что это старый поток, но он может быть полезен для кого-то.
Вы можете выгрузить представление ViewControllers, вызвав:
[viewControllerWhoseViewYouWantToUnload didReceiveMemoryWarning];