前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS内存优化心得

iOS内存优化心得

作者头像
用户5521279
发布2020-04-15 17:02:40
2.4K0
发布2020-04-15 17:02:40
举报
文章被收录于专栏:搜狗测试

背景

当app经过一段儿时间的迭代,往往会出现一些性能问题,这时能够协助开发同学解决这些性能问题也成为我们测试同学的重要工作。凑巧最近一段时间小编就一直在协助开发同学去进行app内存优化。这里小编整理了一份关于内存优化的心得分享给大家。

目的

首先我们先要明确我们的目的,在保证程序运行流畅的前提下尽可能的优化使用内存。所以千万不要掉进为了优化而优化的陷阱。程序要先保证能运行,然后再谈良好运转。所以解决问题比较宽泛,必要的时候在交互或者运转机制上小动刀子来保证既能完成任务,程序又能正常运转,不必去对代码进行完全重构。毕竟在优化效率达到上限的时候,只能用时间换空间了。

iOS内存常见问题

  • 内存泄漏
  • 内存瞬时增幅过高
  • 内存异常使用

内存泄漏

我们最容易遇到的问题主要就是内存泄漏,泄漏的内存一点点蚕食我们剩余的内存资源,最后导致资源耗尽系统卡死或者崩溃。而内存泄露的实质是堆区的内存被分配之后,没有在使用完成之后,在适当的时候被释放掉。比如下面代码(主要是循环引用):

代码语言:javascript
复制
- (void)viewDidLoad {
    [super viewDidLoad];
    // 此处会发生内存泄露,因为self 添加了全局 block,self 对此 block 存在强引用。
    [self executeBlock2:^{
        self.index = 1;
    }];
}
 
- (void)executeBlock2:(dispatch_block_t)block {
    // 这个 _block 全局变量就是内存泄露的原因 
    _block = block;
    if (block) {
        block();
    }
}

当整个代码形成了一个强引用的持有链条(对象a强引用对象b,对象b强引用对象a),这一组内存就被持续占用了,所以有些App如果做的很差,用户就会发现自己越用越卡,经常内存溢出甚至导致设备重启,罪魁祸首就是内存泄露过多,当App占用过高的内存,直接被系统kill,亦称低内存崩溃。上面代码中主要是内存泄漏的一直主要原因,如果想知道解决方案可以去查找循环引用相关资料。

内存瞬时增幅

在一些使用场景里,比如整个页面初始化,要分配整个使用内存,批量的图片处理,会出现一段时间内需要加载大量内容,占用过高的内存。而iOS的低内存机制就是给你一个阈值,只要你的APP超过这个数值,哪怕只是一瞬间也会直接崩溃。因此我们就需要对这种瞬间的高增幅去进行优化。如果我们发现单纯的降低内存使用行不通时,我们就需要用时间去换空间,拉长整个加载步骤。

  • 懒加载
  • 灵活运用图片和文件加载
  • 拉长文件处理机制,逐步处理文件

内存使用异常

这个问题也容易理解,比如我们在处理文件时,假如遇到一个大文件,我们在使用过程中就要避免将其整体读入内存中,尽量按照固定长度或者逐行去进行操作,同理对于内存空间的申请时,我们也要尽量做到够用即可,切记不要只顾自己爽而忘了整体,多余的内存申请既提升不了代码质量和执行效率还会造成很多资源浪费,提高APP遇到低内存崩溃的概率。还有就是在iOS开发时不要用xib来拖拉控件,很多的xib会特别大的增加App的内存,在优化内存的时候,不妨把xib文件删除选择全代码来开发。也可以节省很多内存。

总结

内存的优化方式除了上面说的几种还有更多有待发现,我们虽然作为测试同学,但是在这种优化时刻还是需要积极参与,毕竟优化重构这种改动总是会引起很多毁灭性BUG,只有我们脑中存在这些知识才能更好的判读改动范围,更好的去进行测试,守住APP的底线。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档