性能优化知识点总结

一,了解性能优化的点;
1)(main函数执行之前)启动速度测量:Product->schema-editSchema 里面添加一个DYLD_PRINT_STATISTICS 1

2)main 函数执行的实践

12)的优化

减少动态库加载
减少类数量
Main函数不要太多耗时操作

3)循环引用:堆
堆,栈,静态区。
获取引用计数:CFGetRetainCount/ valueForkey retainCount
block weakSelf, StrongSelf 使用场景?
野指针:可以开启僵死对象调试
assign 和 weak 区别,assign修饰的对象回收时不会置空,有可能有野指针情况,weak 则会。
检查内存泄漏的方法:
1,静态检测

  1. 手动开启静态检测:product - analysing
    2)开启自动检测:target- > buildSetting- > analyze during build 设置一下。

2,动态检测instrument, 第三方内存检测工具(MleaksFinder:只检测试图)

3,打印析构

ARC。CG类,c方法, CF类手动释放

4)内存检测的原理
Method Swizzling 方法交换

@seletor(test:) 下面两个方法是不能共存的。

  • (void)test:(BOOL )b;
    -(void)test:(NSString *)a;

下面这两个就可以,因为存在不同的地方。

  • (void)test:(BOOL )b; 类对象
    +(void)test:(NSString *)a; 元类对象

如何写一个工具:
目标:检测试图控制器是否内存泄漏
思路:我们在控制器弹出消失的时候,监听对象是否还活着

知识点:
load:不会覆盖,各个类都有自己的load方法
initialize: 懒加载的时候调用,类触发的时候

所以方法交换应该在load 方法里面。可以查看自己的代码。LeakCheckingDemo!!!!!

二,如何应用到我的实践中;

LeakCheckingDemo
思路:在控制器pop出去的时候,设置一个值pop为YES,然后在viewdidappear的时候取出这个值,如果为YES(pop过了)那么就延迟去检查self 是否为空,不为空就调用去打印

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容