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.files.wordpress.com/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。
如此看得出來實作內容所造成的差異。
其實這裡我苦惱的是,那些沒有指標的記憶體不知道如何釋放⋯⋯
隨意留個言吧:)~