美文网首页
内存泄露和循环引用问题

内存泄露和循环引用问题

作者: 奕十八 | 来源:发表于2016-08-26 12:06 被阅读34次

内存泄露和循环引用问题

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

  • 静态分析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)

相关文章

  • 内存泄露和循环引用问题

    内存泄露和循环引用问题 开发项目时你怎么检查内存泄漏 静态分析analyze instruments里有一个lea...

  • 如何快速定位没调用dealloc的问题

    Keywords :内存泄露,循环引用 前言 最近做项目碰到两次内存泄露的问题,一个是UIViewControll...

  • iOS循环引用

    什么是循环引用? 循环引用:是指多个对象相互引用,导致内存无法释放,从而导致内存泄露。 循环引用的四种情况? 父类...

  • Block 代码块中防止self循环引用的问题

    一、什么是循环引用 循环引用指两个对象相互强引用了对方,即retain了对方,从而导致谁也释放不了谁的内存泄露问题...

  • iOS之NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • iOS NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • 面试题:NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • iOS之NSTimer循环引用的解决方案

    前言 在使用NSTimer,如果使用不得当特别会引起循环引用,造成内存泄露。所以怎么避免循环引用问题,下面我提出几...

  • iOS 底层 day29 循环引用 和 内存泄露

    一、UIView 的 block 写动画 1. 请问下面代码有内存泄露吗?有循环引用吗? 没有内存泄露,也没有循环...

  • iOS 性能优化

    列举在项目开发中可能遇到的优化点 1、内存泄露检测可能出现内存泄露的地方:循环引用,block强引用,NSTime...

网友评论

      本文标题:内存泄露和循环引用问题

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