面试篇(二):内存优化你做过什么?

一.Analyze(静态分析) 根据代码逻辑,查看内存泄漏问题。
二.Leaks (动态分析)根据实际情况,操作过程查看泄漏问题。

一. Analyze



使用方法:Product - Analyze

泄漏判断:
![Uploading 屏幕快照 2016-11-07 下午1.52.52_214955.png . . .]](http://upload-images.jianshu.io/upload_images/874775-0c9fa81542a5c244.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

优化:修复蓝色部分导致的内存泄漏,点击分号,会展开提示。如下:

展开后效果


二. Leaks



2.1 内存泄漏

使用方法:Product - Profile-Leaks

泄漏判断:

内存泄漏

通过Call Tree 并隐藏系统方法,这样可以查看到自己的错误代码。展开后双击即可调到对应代码位置。


引用网络图片(1)

数据名称介绍


引用网络图片(2)

2.2 内存增长过快

2.2.1 字符串使用不当
字符串使用不当

NSString是不能更改的,那么在拼接的时候,每拼接一次,就会创建一个字符串,所以效率就显得非常低下。

错误❌

    NSString *str = [NSString string];
    NSLog(@"--------");
    for (int i = 0 ; i < 100000; i++)
    {
        str =  [NSString stringWithFormat:@"%@%d",str,i];
    }

错误❌

    NSMutableString *str = [NSMutableString string];
    NSLog(@"--------");
    for (int i = 0 ; i < 50000; i++)
    {
        [str appendFormat:@"%@%d",str,i];
    }

正确✅

    NSMutableString *str = [NSMutableString string];
    NSLog(@"--------");
    for (int i = 0 ; i < 100000; i++)
    {     
       [str appendFormat:@"%d",i];  
    }

黄色-正常
蓝色-偏高
红色-严重偏高

屏幕快照 2016-11-07 下午2.34.43.png

还有一个重点:字符串拼接会消耗大量内存,ARC下可以这么处理~
@autoreleasepool {

}

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

相关阅读更多精彩内容

友情链接更多精彩内容