2015-09-14 46 views
1

我正在創建一個鍵盤擴展,它顯示動畫GIF圖像,但它一次只顯示最多2MB分佈在20個GIF中的圖像。消耗8 MB內存的2 MB GIF圖像

每當加載GIF時,內存消耗增加超過8MB,這導致內存壓力,並且鍵盤在加載後立即終止。

我使用SDWebImage來顯示GIF。

任何人都可以建議我,我應該如何使用GIF,或者是在鍵盤擴展中顯示動畫GIF的好主意?爲什麼擴展佔用這麼多的內存?

謝謝。

+1

GIF被壓縮。 2MB GIF圖像通常包含2MB以上的原始信息。 –

+0

@TheParamagneticCrosissant是的,但多少錢?如果它高達4MB仍然OK。 – iphonic

回答

3

SDWebImage有很多功能,所以對象會很重。嘗試使用FLAnimatedImage。它專門用於顯示GIF

+0

是的,我已經在上面,讓我們看看它是否有效。 – iphonic

+0

手指交叉!讓我知道它是如何做的:) –

+0

是的,它與FLAnimatedImage比SDWebImage更好地工作,崩潰頻率減少了很多。謝謝。 – iphonic

0

當GIF加載時,它們將被解壓縮,以便它們在內存中佔用更多空間。這是因爲iOS需要原始位圖格式的圖像才能編輯或顯示它們。

GIF格式具有非常好的壓縮比,只有8bpp的色彩空間。所以你的情況下的4倍壓縮很可能。

+0

任何解決方案? – iphonic

+0

使用更小的圖片。然而,即使是4S,8MB的數據也不算太多。 – Cosmin

+0

是的,使用更小的Gif大約40-50 KB,可能會有一些更大的GIF激增內存使用量,儘管SDWebImage存在問題,它會消耗比正常更多的內存,檢查它是否正常工作,一切正常。謝謝。 – iphonic

1

嘗試使用FLAnimatedImageNuke,它會自動爲您整合FLAnimatedImage。 FLAnimatedImage是目前iOS上最好的動畫GIF引擎。

SDWebImage的問題在於它們有自己的動畫GIF實現。他們認爲遍歷所有幀和前期創建位圖:從另一方面

for (size_t i = 0; i < count; i++) { 
    CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL); 
    duration += [self sd_frameDurationAtIndex:i source:source]; 
    [images addObject:[UIImage imageWithCGImage:image scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp]]; 
    CGImageRelease(image); 
} 

FLAnimatedImage點播創建位圖和智能緩存它們。