iOS内存警告处理

作者: __Mr_Xie__ | 来源:发表于2019-07-02 18:40 被阅读1次
    • 只要出现内存警告的时候,会第一时间执行 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 方法,来接受内存警告的通知,所以也需要在这里进行处理,将没有显示的 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;
            }
        }
    }
    

    Author

    如果你有什么建议,可以关注我的公众号:iOS开发者进阶,直接留言,留言必回。

    相关文章

      网友评论

        本文标题:iOS内存警告处理

        本文链接:https://www.haomeiwen.com/subject/fdpthctx.html