- 只要出现内存警告的时候,会第一时间执行
AppDelegate
的- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
方法, 可以在这个方法处理:清理内存缓存、取消当前所有的操作(比如:下载、网络请求),举例:SDWebImage
的使用出现内存警告的处理
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
// 1 清除磁盘
// 清除类型为SDImageCacheTypeDisk:直接删除,重新重新创建
// 清除类型为SDImageCacheTypeDisk:清除过期缓存,计算当前缓存大小,和z设置的最大缓存数量比较,如果超出,那么会继续删除(按文件的先后顺序)
[[SDWebImageManager sharedManager].imageCache clearWithCacheType:SDImageCacheTypeMemory completion:nil];
// 2 取消当前所有的操作
[[SDWebImageManager sharedManager] cancelAll];
}
- 遇到内存警告后,在
UIViewController
中都有- (void)didReceiveMemoryWarning
方法,来接受内存警告的通知,所以也需要在这里进行处理,将没有显示的UIViewController
的self.view
置为nil
,释放内存。
// 如果出现内存警告,ios6.0之前,系统会自动清理视图;ios6.0之后,系统不会再自动清理视图,需要手动处理;
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
if ([[UIDevice currentDevice].systemVersion floatValue] >= 6.0) {
// 需要注意的是self.isViewLoaded是必不可少的,其他方式访问视图会导致它加载,在WWDC视频也忽视这一点。
// 是否是正在使用的视图
if (self.isViewLoaded && !self.view.window) {
// 目的是再次进入时能够重新加载调用viewDidLoad函数。
self.view = nil;
}
}
}
Author
如果你有什么建议,可以关注我的公众号:iOS开发者进阶
,直接留言,留言必回。
网友评论