didReceiveMemoryWarning
和 viewDidUnload
是 iOS 开发中与内存管理相关的两个重要方法,主要用于处理低内存情况。
这是 UIViewController 的一个方法,当系统内存不足时会被调用。它通知控制器系统内存不足,开发者可以在此释放不必要的资源。
这是 UIViewController 的另一个方法(在 iOS 6 及以后版本已废弃),当控制器的视图因内存不足被卸载时调用。开发者可以在此释放与视图相关的资源。
didReceiveMemoryWarning
在内存不足时首先被调用viewDidUnload
viewDidUnload
被废弃,只使用 didReceiveMemoryWarning
// Objective-C 示例
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// 释放可以重建的资源
if ([self isViewLoaded] && [self.view window] == nil) {
self.view = nil; // 卸载视图
}
// 释放其他非关键资源
self.cachedData = nil;
}
// iOS 5及之前的viewDidUnload实现(已废弃)
- (void)viewDidUnload {
[super viewDidUnload];
self.myOutlet = nil; // 释放IBOutlet引用
}
// Swift 示例
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// 释放可以重建的资源
if isViewLoaded && view.window == nil {
view = nil // 卸载视图
}
// 释放其他非关键资源
cachedData = nil
}
didReceiveMemoryWarning
问题:应用在内存警告后崩溃 原因:可能是在释放资源时过度清理了必要数据 解决:确保只释放可以重建的非关键资源
问题:视图状态丢失
原因:未正确保存视图状态就释放了资源
解决:在释放前保存必要状态,在viewDidLoad
中恢复
现代iOS开发中,开发者应主要关注didReceiveMemoryWarning
的实现,合理释放资源以响应内存警告,同时确保应用功能的完整性。