好的应用应该在系统内存警告的情况下,释放一些可以重新创建的资源. 在 iOS 中,我们可以在应用程序委托对象, 视图控制器以及其他类中获得系统内存警告消息.
<b>1.应用程序委托对象</b>
在应用程序委托对象中接收到内存警告消息,需要重写 applicationDidReceiveMemoryWarning:方法,
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{
NSLog(@"appDelegate 中调用applicationDidReceiveMemoryWarning:");
}
<b>2.视图控制器</b>
在视图控制器中接收内存警告消息,需要重写 didReceiveMemoryWarning:方法.
- (void)didReceiveMemoryWarning {
NSLog(@"ViewController 中的didReceiveMemoryWarning调用");
[super didReceiveMemoryWarning];
// 释放资源代码应该放在 [super didReceiveMemoryWarning]; 语句后面.
}
<b>3.其他类</b>
在其他类中可以使用通知. 在内存警告是, iOS 系统会发出 UIApplicationDidReceiveMemoryWarningNotification 通知, 凡是在通知中心注册了该通知的类都会接受到内存警告通知,
- (void)viewDidLoad {
[super viewDidLoad];
// 接收到内存警告通知,调用handleMemoryWarning方法处理
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(handleMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
}
// 处理内存警告
- (void)handleMemoryWarning{
NSLog(@"ViewController 中 handleMemoryWarning 调用");
}
在上述代码中, 我们在viewDidLoad
方法中注册UIApplicationDidReceiveMemoryWarningNotification
消息,接收到报警信息后调用handleMemoryWarning
方法, 这个代码完全可以写在其他类中, 在 viewController
中重写 didReceiveMemoryWarning
方法就可以了, 这里只是示意性的介绍一下 UIApplicationDidReceiveMemoryWarningNotification
报警信息.
内存警告在设备上并不经常出现, 一般我们没有办法模拟, 但是模拟器上有一个功能可以模拟内存警告. 启动模拟器, 选择"硬件" -> "模拟内存警告" 模拟器菜单, 这是我们会在输出窗口看到内存警告发生了.