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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,618评论 1 32
  • IOS好的应用应该在系统内存警告情况下释放一些可以重新创建的资源 1、应用程序委托对象 在应用程序委托对象中接收内...
    像小强一样活着阅读 5,372评论 0 1
  • 思路一: “你要今天回去,就别回来了。以后跟你哥过就行,也别要这个家了!” 当因为争吵变得怒不可遏的妻...
    玉璁珑阅读 354评论 2 3
  • 星期天的早上,难得的睡个懒觉。睁开眼睛的第一瞬间,脑袋里想的是,今天是周几?用不用上班?待到意识清醒之后,想到不用...
    婷婷小妞阅读 645评论 1 3
  • 黑桃欣阅读 123评论 0 0

友情链接更多精彩内容