性能优化

作者: 钎探穗 | 来源:发表于2020-08-04 17:48 被阅读0次

循环问题

例如NSTimer,注册了runloop,NSTimer持有self,runloop和线程一一对应,主线程不退出,self没法回收,导致循环引用。
解决:
1:通过timer含有block的函数方法,来创建timer,并配合weak,strong进行操作。
2:通过中间者,创建实例对象(例如创建一个继承NSProxy的实例对象),在该文件中,声明属性(被weak修饰),作为目标执行者通过
-(NSMethodSignature*)methodSignatureForSelector:(SEL)sel{ }-(void)forwardInvocation:(NSInvocation *)invocation{ }来传递target来执行方法操作。
外部则通过strong来修饰这个实例对象,当timer正常释放销毁时,析构函数被调用,弱引用表被清空,不会造成额外的持有。
3:创建一个NSobject类型的对象,对象调用addMethod方法来动态添加方法,去改变转发原有要执行的操作方法。

注:weak的操作要慎用。在解决循环引用的时候使用。因为weak在执行时,底层调用的是objc_initWeak函数,接着store_weak,会涉及到weak_register,通过hash运算,放到weak_table表中,key:当前对象的地址,value:对象被weak的所有地址。当对象被释放时,会调用weak_unregister,循环遍历弱引用表,将所有对象被weak的指针置位nil。相对消耗性能。

界面优化

能异步操作异步操作,将界面UI分解成小任务。

界面卡顿的原因以及对应处理
1:有耗时操作:文本计算,大量图片绘制,高清图——放子线程操作;
2:CGD短时间内创建大量任务——使用线程池解决(事先创建若干可执行的线程放入一个池中,需要的时候,从线程池中获取线程不用自行创建,使用完毕不需要销毁线程,直接放回池中,减少了创建和销毁线程对象的开销)

内存泄漏

除使用工具外,可通过代码检测,在视图生命周期结束时,延迟发送一个消息,可通过响应返回的值的情况去判断内容是否都被释放。

NSLog(@"方法响应,有返回值说明有可能造成了内存泄露%@",NSStringFromClass([self class]));

相关文章

  • Android性能优化 - 消除卡顿

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化 - 内存优化 性能分析工具 - Tra...

  • Android性能优化 - 内存优化

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - Trac...

  • 前端性能优化(中)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(上)...

  • 前端性能优化(下)

    性能优化调研系列文章 《前端性能优化(上)》 《前端性能优化(中)》 《前端性能优化(下)》 《前端性能优化(中)...

  • Awesome Extra

    性能优化 性能优化模式 常见性能优化策略的总结 Spark 性能优化指南——基础篇 Spark 性能优化指南——高...

  • 常用的后端性能优化六种方式:缓存化+服务化+异步化等

    性能优化专题 前端性能优化 数据库性能优化 jvm和多线程优化 架构层面优化 缓存性能优化 常用的后端性能优化六大...

  • webpack 性能优化

    webpack性能优化 开发环境性能优化 生产环境性能优化 开发环境性能优化 优化打包构建速度 优化调试功能 生产...

  • iOS性能优化 - 整理

    本文主要包含: 性能优化 - 卡顿性能优化 - 耗电优化性能优化 - APP启动优化安装包瘦身 一  性能优化 -...

  • 【React.js 20】React性能优化

    React性能优化 React性能优化主要分三块: React 组件性能优化 属性传递优化针对单组件性能优化,很多...

  • Android性能优化(下)

    Android性能优化 内存泄漏和性能优化方式Android性能优化(上)数据库优化和网络优化Android性能优...

网友评论

    本文标题:性能优化

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