【iOS】如何优雅快速的大量导入与展示系统照片与视频

1 篇文章 0 订阅
1 篇文章 0 订阅

最近接了一个需求,要求增加一个相册导入图片(视频)的功能,具体要求有:

1、导入速度要非常快,1000张图片需要控制在一分钟,需要复制到本地
2、可以无限制导入,导入数量需要支持10000+
3、需要拿到图片的基本信息,包括位置,尺寸,大小,格式,时长等

所以问题基本就要围绕如何又快又稳定的拿到这些图片,并且显示到界面上。

v1.0版本我做了如下处理:

接入的是一个三方的导入框架QBImagePickerController,界面基本可以符合我的要求,按照正常导入基本流程,拿到了 [PHAsset]

1.控制数量为9张图片(视频)。
2.拿到图片资源后,保存到指定文件夹(app document目录下),并且把路径信息保存到数据库
3.collection加载图片时候,通过URL来加载图片

面临的问题:
1.拿到数量太少,不满足需求,虽然对标的是微信的九张图片或者视频,不过有竞品可以取到所有
2.导入速度过慢,一张图片需要5s+
3.显示速度过慢,跟显示网络图片一样,需要加载

于是有了优化版本

v1.1版本我做了如下处理:

1.增加缩略图,每次导入图片,顺便压缩导入缩略图(240*240),存入本地
2.collection加载图片时候,先看数据库model是否有缓存的缩略图Data,如果有,直接加载,如果没有,尝试加载本地缩略图并缓存,如果本地缩略图没有,加载本地原图并缓存
3.requestImageDataAndOrientation(for: 替代 requestImage(for:,有需要时候再进行Data->UIImage转换 (实测:requestImage(for:很慢,requestImageDataAndOrientation(for: 可以提速不少)
4.扩充图片到支持所有图库

面临的问题:
1.导入图片由于改变存储方式(UIImage->Data)有所提升,依然不够快,大概需要1s+
2.数量过多时候,有闪退存在(大概300张+),无闪退日志

于是有了优化版本

v1.2版本我做了如下处理:

1.工具检查发现是内存溢出,短时间内产生太多对象而没有被回收
2.引入autoreleasepool,控制内存回收
3.拿图片信息延迟处理,除去后续可能需要扩展的基本信息(排序需要用的size,分辨率等),统统在展示基本信息的情况下来获取。

至此,导出图片跟展示基本可以满足需求
1、图片支持过万导入
2、加载预览均很流畅
3、导入速度很快,1000张图片可以控制在数秒内完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值