iOS已經寫好的方法,通常我們只要會使用就好,至於實作內容我們就姑且當作沒看到⋯⋯不過在一些情況下,我們很注重效能、效果、效率,原本微不足道的差異或錯誤,將造成「失之毫釐差以千里」的結果。我們就來試驗一下載入來源不同的影像吧~
如果只是載入一張影像,對於今日硬體設備如此強大而言,我們對記憶體使用量幾乎沒有感知,於是特別給它跑了好幾圈,這樣微小的差異將被放大出來~
我所使用的圖如上,它的容量只有30KB,名稱為ban5.png,各別跑10^6次,看記憶體容量會暴增到怎樣的程度,imageWithData和imageNamed來比試一下。
/**
Theme: Read Image from Different Resource
IDE: Xcode 5
Language: Objective C
Date: 102/12/24
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
-(void)getImageFromRemote
{// from web
NSString *url = @"https://cg2010studio.com/wp-content/uploads/2011/12/ban5.png";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
for (int i = 0; i < 1000000; i++) {
UIImage *image = [UIImage imageWithData:data];
[self.imageView setImage:image];
}
}
-(void)getImageFromLocal
{// from resource
for (int i = 0; i < 1000000; i++) {
UIImage *image = [UIImage imageNamed:@"ban5.png"];
[self.imageView setImage:image];
}
}
從Web抓,記憶體1.65GB; 從Resource抓,記憶體166MB。
後者名稱打:(皆可顯示影像)
- ban5
- ban5.png
記憶體都是近約166MB。
名稱打除了正確名稱外的副檔名如:(皆不能顯示影像)
- ban5.jpg
- ban5.pn
記憶體都是近約1.39GB。
如此看得出來實作內容所造成的差異。
其實這裡我苦惱的是,那些沒有指標的記憶體不知道如何釋放⋯⋯

隨意留個言吧:)~