viewDidUnload 和 viewWillUnload 被废弃之后的内存警告处理
由于iOS6以上的UIKit不会在内存警告时自动释放视图,所以viewWillUnload和viewDidUnload将不再触发。
因此,在iOS6上,开发者需要负责内存警告时将不用到的视图释放。
WWDC2012的视频有提到,具体代码如下:
- (void)viewDidLoad{ self.subView.delegate = self; [[NSNotificationCenter defaultCenter] addObserver:self]; self.viewCreatedByCode = [[UIView alloc] init];}// 自定义函数viewUnloaded,其操作与viewDidLoad对称。- (void)viewUnloaded{ self.subView.delegate = nil; [[NSNotificationCenter defaultCenter] removeObserver:self]; self.viewCreatedByCode = nil;}- (void)didReceiveMemoryWarning { if ([self isViewLoaded] && [self.view window] == nil) { self.view = nil; // 需要开发者手动释放控制器的视图。 self.viewCreatedByNib = nil; // 在xib中创建的视图也要手动清空。 [self viewUnloaded]; // 视图已被卸载,调用viewDIdLoad的反操作。 }} - (void)dealloc{ if ([self isViewLoaded]) { [self viewUnloaded]; // 如果视图已被加载,说明viewDidLoad被调用过,所以调用viewDIdLoad的反操作。 }}