iOS内存警告处理

  • 只要出现内存警告的时候,会第一时间执行 AppDelegate- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 方法, 可以在这个方法处理:清理内存缓存、取消当前所有的操作(比如:下载、网络请求),举例:SDWebImage 的使用出现内存警告的处理
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    // 1 清理内存
    // 清除类型为SDImageCacheTypeDisk:直接删除,重新重新创建
    // 清除类型为SDImageCacheTypeDisk:清除过期缓存,计算当前缓存大小,和z设置的最大缓存数量比较,如果超出,那么会继续删除(按文件的先后顺序)
    // 默认的图片过期时间:7天
    [[SDWebImageManager sharedManager].imageCache clearWithCacheType:SDImageCacheTypeMemory completion:nil];
    
    // 2 取消当前所有的操作
    [[SDWebImageManager sharedManager] cancelAll];
}
  • 遇到内存警告后,在 UIViewController 中都有 - (void)didReceiveMemoryWarning 方法,来接受内存警告的通知,所以也需要在这里进行处理,将没有显示的 UIViewControllerself.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;
            // 释放其他可复现的资源&&保存的数据,eg:数据源数组...
        }
    }
}

Author

如果你有什么建议,可以关注我,直接留言,留言必回。

你可能感兴趣的:(iOS内存警告处理)