FOOM(Foreground Out Of Memory),code.facebook.com/posts/11469…,app前台因为内存暴增引起的前台系统级crash,使用市面上大部分的监测工具都无法获取调用堆栈。如何监测可以学习《iOS微信内存监控》。本文旨在如何处理由于内存暴增引起的FOOM问题处理。
内存增大,大部分罪魁祸首都是图片资源。为了增强用户体验,保证高fps的图片缓存框架一般都会进行强制解码,带来的弊端就是会在内存中产生大量的VM:CGRaster Data,如果在短时间内decode过多图片就会引起crash。
通过调研发现Twiter的image-pipeline提供了一个较为有效的方法,分享给大家。通过顺序访问CGContext可以有效降低,在很短时间内出现峰值而导致app被kill。
void ExecuteCGContextBlock(dispatch_block_t block)
{
static dispatch_queue_t sContextQueue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sContextQueue =dispatch_queue_create("xxx.CGContext.queue",DISPATCH_QUEUE_SERIAL);
});
@autoreleasepool {
dispatch_sync(sContextQueue, block);
}
}
网友评论