? ? ? ? FOOM(Foreground Out Of Memory)幌墓,code.facebook.com/posts/11469…,app前臺因為內(nèi)存暴增引起的前臺系統(tǒng)級crash铸鹰,使用市面上大部分的監(jiān)測工具都無法獲取調(diào)用堆棧。如何監(jiān)測可以學(xué)習(xí)《iOS微信內(nèi)存監(jiān)控》。本文旨在如何處理由于內(nèi)存暴增引起的FOOM問題處理戒财。
????????內(nèi)存增大,大部分罪魁禍首都是圖片資源捺弦。為了增強用戶體驗饮寞,保證高fps的圖片緩存框架一般都會進行強制解碼,帶來的弊端就是會在內(nèi)存中產(chǎn)生大量的VM:CGRaster Data列吼,如果在短時間內(nèi)decode過多圖片就會引起crash幽崩。
? ? ? ? 通過調(diào)研發(fā)現(xiàn)Twiter的image-pipeline提供了一個較為有效的方法,分享給大家寞钥。通過順序訪問CGContext可以有效降低慌申,在很短時間內(nèi)出現(xiàn)峰值而導(dǎo)致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);
? ? }
}