美文网首页
iOS内存泄露与内存优化

iOS内存泄露与内存优化

作者: Handyzzz | 来源:发表于2017-10-22 10:46 被阅读0次

一.哪些时候会出现内存泄露

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导致的循环引用,__weak type(self) weakSelf = self,在block中用weakSelf就可以了。

4.图片没释放,instrument调试后,发现没被释放的全是imageIO,imageNamed 会cache 先从内存中取出图片 如果内存中不存在 就从缓存到内存才能中imageWithContentOf 只会加载文件不会缓存所以较大的图片,还是用imageWithContentsOfFile。

  • TIPs1:.xcassets里的图片无法用imageWithContentsOfFile读取;
  • TIPs2:imageWithContentsOfFile读取图片需要加文件后缀名如png,jpg等;

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

内存优化

即使内存不发生泄露,在某些情况下,我们也需要对内存使用进行优化。

1.内存优化的常用方法实例。
  • cell 复用API dequeueReusableCellWithIdentifier 和 非复用API cellForRowAtIndexPath 两个api 复用
  • 轮播图,能复用就复用
  • 内嵌autorelease pool
2.内存检测工具
analyze

Analyze主要分析以下四种问题:
1、逻辑错误:访问空指针或未初始化的变量等;
2、内存管理错误:如内存泄漏等; 比如ARC下,内存管理不包括core foundation
3、声明错误:从未使用过的变量;
4、Api调用错误:未包含使用的库和框架。
缺点: 静态内存分析由于是编译器根据代码进行的判断, 做出的判断不一定会准确, 因此如果遇到提示, 应该去结合代码上文检查一下,使用略。

instrument leaks

有时使用静态分析能够检查出一些内存泄露问题,但是有时只有运行时使用Instruments才能检查到。使用略。

相关文章

  • iOS内存泄露与内存优化

    一.哪些时候会出现内存泄露 1.声明delegate为strong类型,简而言之,如果父VC持有子VC,并设置子V...

  • 性能优化与保活

    ------内存泄漏优化------Android 内存优化你的 Handler 内存泄露 了吗?Android卡...

  • Android内存优化

    Android内存管理机制 优化内存的意义 内存分析工具 避免内存泄露 优化内存空间未完待续

  • iOS内存优化问题

    在用非ARC模式编写iOS程序的时候,造成程序内存泄露在所难免,后期我们一般会进行内存优化。自己比较常用的内存优化...

  • 内存优化

    内存优化主要是分析内存泄露和内存溢出。将从内存是怎么分配,内存怎么出现泄露和溢出,用工具判断什么情况出现泄露,找出...

  • Android 内存优化知识点总结

    Android 内存优化(常见的内存泄露以及优化方案) 内存泄露的含义: 如果一个无用对象仍然内其他对象持有引用,...

  • iOS APP内存优化记录

    iOS APP内存优化记录iOS APP内存优化记录

  • Android内存优化-进阶

    内存优化-进阶篇 内存优化分为: 内存抖动、内存泄露、内存溢出 OOM 1、优秀的架构设计 1.1 MVVM 设计...

  • 内存优化(三)Android对象池使用

    概述 由内存优化(一)浅谈内存优化中看出,内存优化不仅要从防止内存泄露入手,也要注意频繁GC卡顿,内存抖动以及不必...

  • iOS 性能优化内存优化学习

    iOS APP渲染性能优化iOS性能优化之内存(memory)优化iOS内存和性能优化

网友评论

      本文标题:iOS内存泄露与内存优化

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