性能優(yōu)化

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.刪除過多的歷史消息;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容