问题描述:app 出现内存偏高的问题,app 是一个展示图片居多的app,浏览多个图片list 页以后,内存最高峰值跑到了150m,然后app 出现了闪退;问题:① 怎么能够避免内存偏高的问题?② 如果不能避免那么怎么降低内存偏高呢?③ 如果上面两个问题都不能解决,那么出现内存偏高的时候怎么处理可以避免闪退呢?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
请确保试用真机release模式进行测试
请确保内存没有泄露
如楼上所说,首先检查是不是有内存泄露。
1.造成闪退的原因是什么?没有看到 log 并不能确定就是内存高造成的。2.浏览图片的列表的话,可以使用 SDWebImage 之类的来缓存图片,设定缓存使用内存的上限,加上表格重用,并不会使用到很多内存的。
假如展示的图片过多导致的内存升高,先看看图片释放了没有。一般情况下是没有及时的释放掉图片。
如果在某次操作后内存突然偏高并且保持稳定或持续走高,基本可以确定是内存泄露的原因。在判断内存泄露的时候,首先,应该确定代码的哪出位置出现了内存泄露问题;第二,如果是图片导致的原因,可能因为网络请求的图片没有设置本地缓存;第三,注意网络请求、数据库操作、UIView类及子类的释放。最后,在XcodeProduct->Profile可以对项目进行调试,等待编译完成后调出Instruments,使用其中的Leaks可以查看内存泄露情况。
Product->Profile
比较常见的图片优化,也有可能是原始数据中的图片太大,导致内存升高。建议在list列表中使用缩略图。
做一些合理的释放操作,当用的时候在开辟空间。
我觉得是那些滑出屏幕的cell上的图片没有释放掉,一般来说,滑出屏幕的cell会被释放-->cell里面的内容释放-->UIImageView释放-->然后UIImage释放,检查这个释放链中是否有某个环节没有释放。比较可能的是你的UIImage对象还有其他的地方引用了,比如NSArray里存入了,比如在NSCache里。释放就是不要有任何的强引用保存这个对象了
请确保试用真机release模式进行测试
请确保内存没有泄露
如楼上所说,首先检查是不是有内存泄露。
1.造成闪退的原因是什么?没有看到 log 并不能确定就是内存高造成的。
2.浏览图片的列表的话,可以使用 SDWebImage 之类的来缓存图片,设定缓存使用内存的上限,加上表格重用,并不会使用到很多内存的。
假如展示的图片过多导致的内存升高,先看看图片释放了没有。一般情况下是没有及时的释放掉图片。
如果在某次操作后内存突然偏高并且保持稳定或持续走高,基本可以确定是内存泄露的原因。
在判断内存泄露的时候,首先,应该确定代码的哪出位置出现了内存泄露问题;
第二,如果是图片导致的原因,可能因为网络请求的图片没有设置本地缓存;
第三,注意网络请求、数据库操作、UIView类及子类的释放。
最后,在Xcode
Product->Profile
可以对项目进行调试,等待编译完成后调出Instruments,使用其中的Leaks可以查看内存泄露情况。比较常见的图片优化,也有可能是原始数据中的图片太大,导致内存升高。建议在list列表中使用缩略图。
做一些合理的释放操作,当用的时候在开辟空间。
我觉得是那些滑出屏幕的cell上的图片没有释放掉,一般来说,滑出屏幕的cell会被释放-->cell里面的内容释放-->UIImageView释放-->然后UIImage释放,检查这个释放链中是否有某个环节没有释放。比较可能的是你的UIImage对象还有其他的地方引用了,比如NSArray里存入了,比如在NSCache里。释放就是不要有任何的强引用保存这个对象了