iOS 内存优化
2020-05-06 本文已影响0人
Rockerliang
内存优化
一. 内存泄露
Xcode 自带了两种内存泄露查询工具:
1 . Analyze(静态分析工具):
- 逻辑缺陷:访问空指针或未初始化的变量等;
- 内存管理错误:如内存泄漏等;
- 无用存储逻辑:(永远不会被访问的变量、永远不会执行的代码);
2.Instruments-Leaks
常见的内存泄漏:
- Block循环引用
- delegate循环引用问题
- NSTimer循环引用
- 非OC对象内存处理: CoreFoundation框架下的某些对象或变量需要手动释放、C语言代码中的malloc等需要对应free等。比如CFRunloopRef
- 大次数循环内存暴涨问题 (其实也是内存峰值的问题)
for (int i = 0; i < 100000; i++) {
@autoreleasepool {
NSString *string = @"Abc";
string = [string lowercaseString];
string = [string stringByAppendingString:@"xyz"];
NSLog(@"%@", string);
}
}
二.内存消耗过大或有内存峰值等
1.加载大图:CATiledLayer类似瓦片视图,可以将绘制分区域进行,常用于一张大的图片的分部绘制。
- 使用这个layer的好处之一就是,它不需要你自己计算分块显示的区域,它自己直接提供,你只需要根据这个区域计算图片相应区域,然后画图就可以了。
- 第二个好处就是它是在其他线程画图,不会因为阻塞主线程而导致卡顿。
- 第三个好处就是它自己实现了只在屏幕区域显示图片,屏幕区域外不会显示,而且当移动图片时,它会自动绘制之前未绘制的区域,当你缩放时它也会自动重绘。
2.生成大量临时变量