Я выполнил обширную регистрацию и настройку точки останова, исследуя, выгружает ли didReceiveMemoryWarning
представление, когда UIViewController
не является visibleViewController
.Результаты: UIViewController
view
не выгружается (протестировано с использованием ARC в UINavigationController
проекте) .Вам нужно установить self.view
на ноль, и будет перезагружено при повторном вызове self.view
.Даже запись в журнал self.view
приведет к его повторной инициализации - используйте isViewLoaded
для проверки, загружен ли он, вместо проверки свойства для nil
.
#define String(fmt,...) [NSString stringWithFormat:fmt,__VA_ARGS__]
#define NSStringFromBOOL(aBool) String(@"%@", aBool?@"YES":@"NO")
- (void)didReceiveMemoryWarning
{
NSLog(@"%s", __FUNCTION__); //-[ViewController didReceiveMemoryWarning]
[super didReceiveMemoryWarning];
if (![self.navigationController.visibleViewController isEqual:self])
{
NSLog(@"%@",NSStringFromBOOL(self.isViewLoaded)); //YES
self.view = nil;
NSLog(@"%@",NSStringFromBOOL(self.isViewLoaded)); //NO
}
}