2013-03-21 106 views
-4

我用imageNamed但是imageNamed會緩存你的圖像,但是,使用imageWithContentsOfFile:來避免緩存。如何讓這段代碼更好?

而使用儀器,我看到,消耗大量的時間。 這怎麼可能更好?

enter image description here

+6

請將實際的代碼粘貼爲文本,以便我們可以閱讀。 – rmaddy 2013-03-21 18:07:54

+0

更不用說,它會顯得好像你可以只使用for語句來遍歷每個圖像並將其添加到數組中。 – Josiah 2013-03-21 18:14:11

+0

改爲將資源路徑存儲在數組中。然後抓住你需要的圖像。 – AMayes 2013-03-21 18:17:18

回答

3

你可能誤會什麼儀器分析告訴你的。 4.3%的95%不是很多。這一切都取決於發生了什麼。如果您沒有經歷嚴重的放緩,請不要進行不必要的優化!

然而,問自己的問題是您是否真的需要一組物理圖像數據。它真的需要花時間將圖像文件解壓縮到它的UIImage數據位圖中。 (更不用說你可以用這種方式運行自己的內存。)爲什麼不存儲一串字符串(你的pathForResource字符串)並且只在需要時才獲取圖像?

最後,我會指出,我在這裏看到一個模式:您正在獲取圖像13,然後是圖像12,然後是圖像11,依此類推。所以你手動執行這個操作的代碼是非常愚蠢的,因爲如果你告訴我索引號,我可以通過算法告訴你什麼圖像對應於它。

+0

謝謝!!這是在拍攝照片時模擬動畫的圖像。 – 2013-03-22 12:52:51

+0

可能考慮'animatedImageNamed:duration:' – matt 2013-03-22 15:22:32

0

你閱讀這些文件,把它們解壓縮,未壓縮的版本分配內存,並將其存儲在數組中。你需要所有的人嗎?你可以一次加載它們而不是全部?這將減少初始化數組引起的重大打擊。

此外,請確保您的圖片不會比您實際顯示的圖片大。如果您只是在較小的區域中加載較大的圖像,則需要較長的時間才能加載和解壓縮該大圖像。

0

嘗試使用[NSBundle mainBundle] pathForResource來代替:......與此代碼:

NSString *bundleRoot = [[NSBundle mainBundle] bundlePath]; 

比如獲得一些映像文件的路徑

UIImage *img= [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@\myImage.png",bundleRoot]];