iOS内存泄漏的常见情况

  1. 声明delegate为strong类型,简而言之,如果父VC持有子VC,并设置子VC的delegate为self(也就是父VC),这样的结果就是子VC也间接持有了父VC,造成循环引用,在Pop子VC的时候不会调用delloc。

  2. timer是否持有self,我们一般要执行一个timer的时候会用(NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti  target:(id)aTarget  selector:(SEL)aSelector  userInfo:(id)userInfo  repeats:(BOOL)yesOrNo   这里的aTarget一般是self,这时候就需要注意了,如果在你退出的时候这个timer还在执行的话由于这个timer会持有self,所以delloc也不会调用,这里可以用weakSelf代替self也是没有问题的。

  3.  最常见的就是block导致的循环引用,由于在重构APP中用到了MVVM架构,使用了大量的信号机制,导致block到处飞(哈哈),解决的最多的就是这种了,解决方法也很简单,就是在block外声明__weak type(self) weakSelf = self,在block中用weakSelf就可以了,还有就是在block中如果使用了成员变量的下划线形式也要改成weakSelf.PropertyName的形式。MVVM中定义了宏对@weakify(self)和@strongify(self)可以理解为__weak type(self) weakSelf = self的简化形式,可以拿来直接使用。

  4. 图片没释放,instrument调试后,发现没被释放的全是imageIO,差不多就知道了,把读图的方式,从[UIImage imageNamed:@""],改成imageWithContentsOfFile,就可以了。

  5. 使用GPUImage处理拍照的时候,内存稳定不明增长。是Xcode7.1的问题。。只在debug的时候导致内存崩溃,release的时候并不会造成内存溢出,所以可以不必管它。

  6. CoreFoundation对象(C对象) : 只要函数中包含了create\new\copy\retain等关键字, 那么这些方法产生的对象, 就必须在不再使用的时候调用1次CFRelease或者其他release函数

IOS内存泄漏分类

03-05

内存泄漏分类rn内存分析分为三类:rn1, 内存上去后完全下不来,内存连续上涨不久就崩溃。rn rn2, 内存连续上涨,但是不崩溃。rn rn3, 内存偶而上涨,上涨后可能有部分内存会下降下来,并且内存上涨到一定rn程度后上涨幅度大幅度下降,可以称为疑似内存泄漏。rnrn百度地图每次缩放后返回原来的页面内存大都增加0.1M以上rn rnapp的所有页面都加载一遍的内存大约54M左右,当不断发送请求加载页面,内存仍旧能够缓慢上涨rn常见的是第1类内存泄漏,只要由测试可再现测试出来必然能够解决。rn由于缺乏除开发工具xcode外的内存泄漏测试工具,基本上测试人员无法发现第二类的内存泄漏,只有开发人员能够这类内存泄漏,如这次发现的商家版本订单列表页面和订单详情页面来回切换时产生的内存泄漏。rn第3类疑似内存泄漏最难定位和解决,甚者暂时没办法彻底解决。如当在地图页面缩放或移动地图页面后返回原来的页面肯能出现内存不能完全回落到原来内存大小。还有切换各种页面并且发送请求时,也可能出现内存上涨后不能完全回落的问题。rnrn正确的内存图像是,当加载新页面时内存增加,加载原来就由的页面时内存不增加后返回后内存能够正常回落。rn [img=http://img.bbs.csdn.net/upload/201503/05/1425525888_312916.jpg][/img]rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试