请教各位大佬, IOS 系统开发 APP 如何避免由于内存过大被系统强制杀死?

2022-03-31 11:12:56 +08:00
 BroSaltedFish

如题。

4041 次点击
所在节点    程序员
39 条回复
fengjianxinghun
2022-03-31 11:16:48 +08:00
不要用那么多内存。。。都有原生写,手动管理内存,精确到每一个字节分配
KouYiGuo
2022-03-31 11:21:04 +08:00
分析一下内存瓶颈,针对性优化。
BroSaltedFish
2022-03-31 11:25:18 +08:00
@fengjianxinghun 感谢回复。
分配内存是 C++管理的内存池,主要消耗的也是 C++管理的这部分,由于是处理图形相关的内存确实大,也没法再省了。除了省内存还有其他方法吗?
nicevar
2022-03-31 11:26:27 +08:00
管理好内存,及时释放资源,如果不是超大型 APP ,基本上不会占用太多内存的,总体感觉自动内存管理的语言占主流之后之后,大多数程序员没有良好的内存管理意识了,包括大厂的 APP ,最近的抖音安卓版本内存泄漏的厉害,频繁 GC 卡得半死,闲鱼这种万年内存泄漏大户就更不用说了。
fengjianxinghun
2022-03-31 11:28:53 +08:00
@BroSaltedFish 没有,能省肯定能继续省,少占内存才是唯一的真正的解决问题的办法。
BroSaltedFish
2022-03-31 11:31:39 +08:00
@KouYiGuo 感谢回复。
内存的优化也一直再做,目前也是到达了省无可省的地步了。。。
除了优化内存,还有其他方法吗?
BroSaltedFish
2022-03-31 11:40:13 +08:00
@nicevar 感谢回复。
主要消耗内存的不是 Objective-C ,基本不会超过 400MB
打开的是 CAD 图纸,内存消耗主要集中对图纸这块,而且图纸这里的内存管理是由 C++写的,基本随用随释放,也没有内存泄漏的问题。主要消耗的还是对图纸的处理。
BroSaltedFish
2022-03-31 11:41:23 +08:00
@fengjianxinghun 唉,内存优化不能停,不能停啊。。。
xwayway
2022-03-31 11:47:02 +08:00
不懂,但是你们需求就是在 ios 打开 cad 图纸?只是查看?还是需要编辑,为什么会占用这么多,是打开图纸的引擎本身就占用很多还是图纸过大导致。有没有可能换个小一点的引擎,如果只是查看,有没有可能在服务端转 jpg ,手机端就让他看个 jpg 就行了。不懂 cad 的小白给出的拙见
nicevar
2022-03-31 11:49:08 +08:00
@BroSaltedFish 没有内存泄漏的话,估计你们得换方案了,跟读取大文件一样,不能一下子全部装进内存里面,现在的 iOS 设备配置挺高的了,我们以前用 AutoCAD 2004 的时候电脑还不如现在的手机,当然那时候的 CAD 文件没有现在的复杂,不过可行性应该没什么问题。
raykle
2022-03-31 11:58:54 +08:00
我不相信已经省无可省了 /doge

比如打开 CAD 图纸,图纸过大的话,有使用瓦片方式加载吗?
BeyondBouds
2022-03-31 12:04:14 +08:00
类似 PS 的 app 怎么省内存?产品要求用户导入的图片必须原图加载编辑.....一般用户也还好,5000x5000 的也还可以,碰见专业的整个 10000x10000 的,真的崩溃....
DingSoung
2022-03-31 12:08:20 +08:00
分块夹在
内存映射
Building
2022-03-31 12:37:21 +08:00
@BeyondBouds 无解,资源太大就是会杀,除非自己实现字节流读取图片分区加载,一顿映射下来等于自己控制了内存……太累
icyalala
2022-03-31 13:05:21 +08:00
一次不要分配过大内存,分成小块分配和使用,实时监控 memory warning 及时释放内存。
再就是用磁盘来顶一下,临时不需要的数据存下来需要时再解码出来,或者 mmap 。慢就慢些,优先保证不崩。
其他没有什么太好的手段,就是想办法省内存。
BroSaltedFish
2022-03-31 13:05:53 +08:00
@xwayway 感谢回复。
需求就是在 IOS 上打开 cad 图纸,需要编辑,图纸引擎本身确实也会占用很多内存,主要还是看图纸,基本 30MB 以上的图纸打开就很有可能被杀死。换引擎基本不可能。。。
@nicevar 目前我们尝试过,加载核心数据,外围数据按需加载的方式,测试效果因图纸差异效果不等,不过感觉还是得从这方面下手。。。
@raykle 感谢回复。
老兄说得对,省无可省是以我现在的能力来看确实没法子了。。。瓦片方式加载我大概了解下是用在地图、图片显示上,我们这还不一样,需要从数据转换成图像,在未读取数据前并不知道位置,不过估计还是得采用局部加载技术手段。
@BeyondBouds 感谢回复。
老兄的问题和我一样啊,确实跟用户的 文件有很大关系,内存大也只能硬着头皮优化啊。。。
@DingSoung 感谢回复。
文件本身不大,大多数处于 50MB 以内,主要是处理读取文件生成数据过程中的内存问题
mjawp
2022-03-31 13:13:56 +08:00
@BeyondBouds 不是一定要原图的吧。你甚至可以对缩略图修改,最后原图同样操作合成的
BroSaltedFish
2022-03-31 13:15:59 +08:00
@icyalala 感谢回复。
内存的管理基本没问题,可能磁盘缓存是后续优化的一个方向了。。。。
xnth97
2022-03-31 14:19:20 +08:00
applicationDidReceiveMemoryWarning 应该给你一次机会了...这时候能释放什么释放什么,总比被杀好
66450146
2022-03-31 15:27:37 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX