美文网首页
内存优化

内存优化

作者: edison0428 | 来源:发表于2020-02-14 17:59 被阅读0次

为什么要进行内存管理?
因为移动设备的内存是有限的,每个app所占的内存也是有限的,当app占用内存较多的时候,系统就会发出内存警告
检测内存问题的一般方法

奔溃日志:EXC_BAD_INSTRUCTION
基本上表示野指针,就是对象释放了还在使用
可以使用僵尸断点查看是哪个内存地址被释放了(product->scheme>edit scheme> run>diagnostics 下选择 zombie object),然后对比调试台的对象的地址,就能知道是哪个对象被释放了还在使用

assign 对应的是 __unsafe_unretained 不持有对象,当对象的引用技术为0的时候,变量不设置为nil,而是继续保持对象的地址

assign 和 weak 都是弱引用,那么区别在哪儿?
weak修饰的变量对象释放后自动清空,赋值为nil
assign修饰的变量对象释放后不会自动清空,所以很容易造成野指针错误

内存泄漏的一般检测方法:

  • 静态检测方法
    • 手动:在build settings里设置 analyze during build 设置为yes,每次编译都会静态分析
    • 自动:product > analyze
      静态分析检查不出来循环引用
  • 动态检测方法 instrument
    选择instrument的leaks,边操作手机边查看内存泄漏的问题,有些时候能检测到内存泄漏,但是定位不到具体位置
  • dealloc
    析构方法打印看有没有跑dealloc
    当某个对象当引用计数为0的时候,它会自动调用 dealloc方法,所以看它dealloc走没走就知道这个对象有没有被释放
  • 第三方检测库
    比如 MLeaksFinder:原理http://wereadteam.github.io/2016/02/22/MLeaksFinder/

相关文章

网友评论

      本文标题:内存优化

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