didReceiveMemoryWarning那些事

最近项目遇到了一个非常难以查找的内存问题,由于内存一直在泄露导致视频播放一段时间之后就会崩溃。然后leader要求在每个页面的didReceiveMemoryWarning函数中写一些释放内存占用的代码。下面是加的过程中的一点小建议,防止大家以后遇到这种问题踩坑。

1.注意:不要主动去调用didReceiveMemoryWarning函数,当内存出现问题,苹果会发送一个内存警告的通知,然后系统会去调用这个函数
2.发生内存警告的时候,没一个页面都会收到这个通知,无论这个页面是否正在显示。
3.鉴于每个页面都会收到这个通知,在释放资源之前需要做一个简单的判断,那就是当前页面是否是正在显示的。

-(void)didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
    if (self.isViewLoaded && !self.view.window) {
      //释放资源的代码
    }
}

4.注意在释放完资源之后,如果想让当前页面重新加载的时候走viewdidload方法,那么需要写self.view = nil。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,221评论 30 472
  • 1.OC里用到集合类是什么? 基本类型为:NSArray,NSSet以及NSDictionary 可变类型为:NS...
    轻皱眉头浅忧思阅读 1,397评论 0 3
  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 904评论 0 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,822评论 25 709
  • 1.Difference between shallow copy and deep copy? 浅复制和深复制的...
    用心在飞阅读 1,031评论 0 9