内存泄漏原因

写代码的时候经常会碰到难以解决的问题,例如内存泄漏或者内存溢出,其实写的时候我们只要注意到一下几点,就能很好的规避问题,今天先写下内存泄漏,有疑问欢迎指正:


内存泄漏原因分析:

导致内存泄漏的根本原因是代码中存在循环引用,从而导致一些内存无法释放,就没有办法dealloc,总结下,有下面几种类型:

1.viewController中有NSTimer,必须将timer invalidate.

2.viewController中的代理delegate,看看有没有强引用,如果你这个VC需要外部传某个Delegate进来,来通过Delegate+protocol的方式传参给其他对象,那么这个delegate一定不要强引用,尽量用assign或者weak;

3.block体内使用实例变量会造成循环引用,使得拥有这个实例的对象不能释放.因为block本来就是当前viewcontroller的一部分,现在有强引用self,导致循环引用无法释放,例如,你找个类叫OneViewController,有个属性是Nsstring *name,如果你在block体中使用了self.name,或者_name,这样子这个类就没法释放了.

//MRC下代码如下

__block Viewcontroller *weakSelf = self;

//ARC下代码如下

__weak Viewcontroller *weakSelf = self;

4.viewController的子视图对self的持有

我们有时候需要在自视图或者某个cell中点击跳转操作等,需要在子视图或cell中持有当前的viewController 对象,这样跳转之后的back键才能直接返回该页面,同时也不销毁当前的viewController,此时,注意在子视图或者cell中对当前页面的持有对象不能强引用,尽量assign或者weak,否则会造成循环已用,内存无法释放;

你可能感兴趣的:(内存泄漏原因)