2010-10-22 2 views
2

Есть моменты, когда didReceiveMemoryWarning вызывается, но viewDidUnload нет. В моей ситуации я хотел бы заставить viewDidUnload когда callReceiveMemoryWarning вызывается.didReceiveMemoryWarning - ручная выгрузка просмотров?

я могу сказать следующее:

[self viewDidUnload]; 

Но будет что действительно выгрузить мнения? Не существует самораспаковывающегося «unloadView».

+0

UIViewController проверяет, действительно ли безопасно его выгружать и установить выходную розетку в noReceiveMemoryWarning. Если представление не выгружается, вероятно, это небезопасно. Другой вариант может заключаться в том, что [super didReceiveMemoryWarning] не вызывается в вашей пользовательской реализации. – sigsegv

ответ

5

Зачем вам это нужно? До тех пор, пока вы не забыли позвонить [super didReceiveMemoryWarning] (при условии, что вы реализуете этот метод вообще), UIViewController автоматически выгружает его представление, если его представление не имеет супервизора. Если этого процесса не происходит, это обычно указывает на то, что представление все еще является частью иерархии представлений, и его небезопасно выгружать.

В довольно маловероятном случае, когда вам действительно нужно вручную выгрузить представление, вы можете сделать это просто, указав self.view = nil.

+1

self.view действительно выгружает представление, но как вы можете его вернуть? – sol

+1

'self.view = nil' выгружает его. В следующий раз, когда кто-нибудь называет 'self.view', он будет перезагружен. Обратите внимание: это означает, что вы не вызываете 'self.view', если вы действительно хотите, чтобы представление было загружено. Вы можете использовать '[self isViewLoaded]' перед тем, как позвонить, чтобы избежать перезагрузки представления в тех местах, где вы предпочли бы, чтобы он оставался без загрузки. –

1

Для того, чтобы проверить мой viewDidUnload код, я сделал это

-(void)forceUnload { 
    NSLog(@"forceUnload.enter"); 
    [super didReceiveMemoryWarning]; 
    NSLog(@"forceUnload.leave"); 
} 
1

Я выполняется обширные лесозаготовками и точки останова установки следственной если didReceiveMemoryWarning разгружает взгляд, когда UIViewController не visibleViewController. Результаты: UIViewControllerviewне разгружается(проверено с использованием ARC в проекте UINavigationController). Вам нужно установить self.view на нуль, и он будет перезагружен, когда self.view вызывается снова. Даже каротаж self.view будет повторно инициализировать его - используйте isViewLoaded, чтобы проверить, загружен ли он, а не проверять свойство на nil.

Смежные вопросы