美文网首页
内存优化举例说几点

内存优化举例说几点

作者: 一个半吊子工程师 | 来源:发表于2020-08-13 21:41 被阅读0次
  • 修饰符关键字的错误使用
assign:实际是__unsafe_unretained类型的,
声明的变量对象释放后不会自动赋值为nil, 会造成野指针错误!

打开僵尸对象

通过打开僵尸对象,我们可以检测出一些野指针问题
打开方式

image

比如下面这段代码运行就会报错

image

所以,开发中delegate用weak来修饰
参考:https://www.jianshu.com/p/606999eb9297

  • 循环应用
并不是所有的block用self就会造成循环引用,
只有相互强引用才会发生循环引用。比如下面用self就不会造成循环引用
Block xxx = ^{
        [self xxx];
    };
使用block时还要注意一些隐式调用self的方式,比如:_obj

self.block = ^{
        _obj = [xxxx new];
    };
  • 计时器使用后不销毁
如果使用NSTimer做定时器,一定要在合适的时机销毁这个定时器,
不然可能导致内存得不到释放。原因就是循环引用
Timer 添加到 Runloop(这里是主线程,默认开启了runloop) 的时候,
会被 Runloop 强引用,然后 Timer 又会有一个对 Target 的强引用(也就是 self ),
循环引用了,也就是 NSTimer 强引用了 self ,
导致 self 一直不能被释放掉,所以也就走不到 self 的 dealloc 里。
  • 通知没有及时清除
NSNotification addObserver之后,在dealloc里面添加remove
  • 动画不主动停止,且不清理动画资源
动画的repeat count无限大,而且也不主动停止动画,基本就等于无限循环
  • 手动开辟内存不释放
  • 使用了不合理的API
  • 网络下载的图片过大
  • 第三方库的缓存机制
  • Masonry布局框架
  • 没必要常驻内存的对象,实现为常驻内存
  • 数据模型中冗余的字段
  • forwardingTargetForSelector不能返回self
  • UIGraphicsBeginImageContext之后调用UIGraphicsEndImageContex

站在巨人的肩膀上学习!如有侵权,请联系删除

相关文章

  • 内存优化举例说几点

    修饰符关键字的错误使用 打开僵尸对象 通过打开僵尸对象,我们可以检测出一些野指针问题打开方式 比如下面这段代码运行...

  • 2019-08-19 App启动优化(二)

    Android性能优化分几点: 1:绘制优化 2:内存优化 3:存储优化 4:稳定性优化 5:好点优化 6: ap...

  • 2018最新 Android 面试题总结(三)

    Q:项目中如何做性能优化的? 举例说明项目注意了哪些方面的性能优化,如布局优化、绘制优化、内存泄漏优化、 响应速度...

  • 面试题难点底层逻辑

    目录 1.多线程管理2.RunLoop3.Runtime4.内存管理5.性能(内存)优化举例6.App 编译与启动...

  • 内存泄漏汇总

    优化内存从以下几点搞起 内存泄漏 (未取消Handler发送的message、被静态引用) 大对象 (OOM)3....

  • 面试题难点底层逻辑

    目录 1.多线程管理2.RunLoop3.Runtime(运行时)4.内存管理5.性能(内存)优化举例6.App ...

  • 内存优化

    内存优化、UI优化(布局优化、会只优化)、速度优化(线程优化、网络优化)、启动优化、电量优化 内存优化 内存抖动:...

  • 内存优化02

    ## 1 内存优化—减少内存使用(Reduce) 如果减少某些不必要内存的使用,也可以达到内存优化的目的。 比如说...

  • Android性能优化篇之内存优化--内存泄漏

    引言 1. Android性能优化篇之内存优化--内存泄漏 2.Android性能优化篇之内存优化--内存优化分析...

  • Android性能优化篇之UI渲染性能优化

    引言 1. Android性能优化篇之内存优化--内存泄漏 2.Android性能优化篇之内存优化--内存优化分析...

网友评论

      本文标题:内存优化举例说几点

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