1、圖片壓縮
美術(shù)給出的圖片,即使是壓縮過,仍存在較大的壓縮空間,可以用這里或者更好的大小優(yōu)化。
2、圖片加載
主要有-imageNamed:和-imageWithContentsOfFile:兩種方式。
AnimationImageCache類是一個動畫圖片加載類,用單例實現(xiàn)且內(nèi)部用NSCache持有引用。
注意,當(dāng)收到內(nèi)存不足警告時,NSCache會自動釋放內(nèi)存。所以每次訪問NSCache,即使上一次已經(jīng)加載過,也需要判斷返回值是否為空。
當(dāng)加載多張圖片的時候建議用-imageWithContentsOfFile:,-imageNamed:方法占用的內(nèi)存短期內(nèi)不會釋放可能會導(dǎo)致內(nèi)存占用過大,記得當(dāng)時做湯姆貓demo的時候遇到過這個問題,把圖片裁剪那個的UIImage* sourceImage = [UIImage imageNamed:@"image/animation/gift_boat"];換成imageWithContentsOfFile方法試試可能會解決一點問題
3、圖片裁剪
為了減少圖片資源的大小,有時候會把多個幀動畫做成連續(xù)的一張圖。這時需要程序加載一整張資源圖,并在相應(yīng)的位置進行裁剪。
4、Q:定時器采用CADisplayLink還是NSTimer?
A:都可以。重點在于添加到的mode,個人采用的是添加到NSRunLoopCommonModes的CADisplayLink。
5、Q:imageWithContentsOfFile加載的圖片沒有緩存,重復(fù)使用的時候會加載多次,是否可以用NSMutableArray存儲起來?
A:不行??梢允褂肗SCache,步驟如下:
1、加載cache中的圖片; 如果有則返回,沒有到步驟2;
2、加載本地的緩存文件,如果有則返回,沒有到步驟3;
3、從網(wǎng)絡(luò)下載圖片,到步驟4;
4、存入本地的緩存文件,到步驟5;
5、放入cache,返回圖片;
如果不需要網(wǎng)絡(luò)下載圖片,可以去除3、4步驟,同時可以同步返回;
如果使用array存儲圖片,會一直持有引用;NSCache會在內(nèi)存不足時主動釋放,故而加載的時候需先判斷是否有緩存文件;
6、Q:使用序列幀的時候,需要加載很多次圖片?
A:可以把多張圖片放到一張圖片,加載后通過-CGImageCreateWithImageInRect切割出多張圖片;
7、Q:instruments檢查發(fā)現(xiàn)除了禮物送頻繁后,聊天的UITableView消耗的時間也很長,如何優(yōu)化?
A:從cell高度計算、圖片加載、布局layout開始優(yōu)化;
a.cell高度不會變,可以緩存;
b.圖片加載可以用imageNamed或者cache實現(xiàn);
c.盡量避免使用autolayout;
d.控制每幀刷新數(shù)量;
e.刪除過多的歷史消息;