内存泄露和循环引用问题

内存泄露和循环引用问题

开发项目时你怎么检查内存泄漏

  • 静态分析analyze
  • instruments里有一个leak工具可以动态分析
  • 如果block中多次使用weakSelf的话,可以在block中先使用strongSelf,防止block执行时weakself被自动释放
  • 对于非ARC,将weak改用为block即可

常见的出现循环引用的场景有哪些

  • 定时器(NSTimer):NSTimer经常会被作为某个类的成员变量,而NSTimer在初始化时又要指定self为target,容易造成循环引用。另外,若timer一直处于validate的状态,则其引用计数将始终大于0,因此在NSTimer使用完毕之后,应该先调用invalidate方法,而且在定义NSTimer属性的时候要使用weak修饰符。
  • block:block在copy时会对block内部用到的对象进行强引用(ARC中访问到外部变量会把变量copy到堆中)或者引用计数+1(非ARC)。一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身。解决办法:
            __weak __typeof__ (self) wself = self;
  • 代理:规避代理循环引用的方法:声明delegate属性的时候用assign(MRC)或weak(ARC)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容