iOS 内存优化

内存优化

一. 内存泄露

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.生成大量临时变量
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。