Как выгрузить представление UIViewController

#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];