为什么要做内存优化?内存优化从内存泄漏开始做起!
据我所知很多iOS开发者都不在意内存泄漏,为什么不在意?因为他们的项目还没有因为内存泄漏而出问题,所以他们往往不在意一点一滴的内存泄漏。等到项目做大了,内存泄漏越来越多了,因为内存泄漏而出现不可意料的问题或者内存警告,甚至APP闪退。这个时候他们就不得不去解决内存泄漏的问题了。有人会说:“那我就等到出现问题再去解决也不迟阿”,我说:“不好!”。为什么呢?因为浪费内存资源,增加CPU不必要的负担,等到那时候你才去解决整个项目的内存泄漏,那时候的内存泄漏的页面超乎你的想象,非常多,有些也不好找出来,这样会大大增加了开发成本。
所以我建议,从一开始做项目时导入检测内存泄露的第三方 pod 'MLeaksFinder',实时检测内存,以减少内存泄露带来的问题,也便于减轻以后检测内存的成本; 地址:http://wereadteam.github.io/2016/02/22/MLeaksFinder/
内存优化也是进阶必学!
会出现内存泄漏的情况有哪些?
1、block循环引用
2、代理不是weak修饰
3、定时器NSTimer没有销毁
解决方案:
b.还有一种方案解决,下次补回代码
4、C语言的方法(凡是出现copy、create等,都需要release)
// CoreGraphics.framework
- (void)drawRect:(CGRect)rect {
//获得上下文
CGContextRefctx =UIGraphicsGetCurrentContext();
//拼接路径
//凡是带有create,copy单词的函数创建的对象,在使用完之后,要release
CGMutablePathRefpath =CGPathCreateMutable();
CGPathAddEllipseInRect(path,NULL, rect);
CGContextAddPath(ctx, path);
//渲染
CGContextStrokePath(ctx);
//销毁路径
CGPathRelease(path);
}
5、MJRefresh 的block里面也会内存泄漏,用weakSlef 解决
好了,我要继续改bug了,很多东西在网上能找到,因为近期较忙就没有做太多解释了。技术点如有偏差,欢迎指出😀