2008-10-14 63 views
2

我正在使用一大堆CALayers,創建一個基於tile的圖像,與GoogleMaps(具有更多/更少細節的相同圖像的不同版本)完全不同。在CALayer中使用UIImage有沒有性能問題?

我使用的是做到這一點的代碼是:

UIImage* image = [self loadImage:obj.fileName zoomLevel:obj.zoomLevel]; 
[CATransaction setValue:(id)kCFBooleanTrue 
       forKey:kCATransactionDisableActions]; 
obj.layerToAddTo.contents = [image CGImage]; 
[CATransaction commit]; 

我真的不覺得自己像使用CoreGraphics中,因爲我很懶從文件加載CGImage。但是,如果有很大的性能提升,我會的! LoadImage只是壓縮一個字符串以獲取加載所述圖像的正確路徑,obj是一個NSObject結構,它包含我需要的所有信息。

幫助?

回答

3

沒有什麼大的性能提升 - 如果有的話是相反的。通過UIImage加載你的圖像,你會得到它爲你所做的所有緩存的好處,它將是一個非常快速的使用你的各種CALayer的小動物。

+1

我只是補充說,鯊魚是你的朋友在這裏。如果你想知道哪裏可以提高你的代碼性能,分析它,並查看它實際花費的時間,而不是在黑暗中進行刺探。 – NilObject 2009-04-07 18:00:15

-3

我沒有一個明確的答案,但我猜你會看到使用UIImage時比使用CGImage時看到的加載時間慢。使用CGImage,您可以在創建過程中指定圖像類型(jpg或png),但使用UIImage時,需要動態確定對象類型。無可否認,這可能與查看圖像文件的前幾個字節一樣簡單,但它可能不是。

一旦圖像被實際使用,我不會想象在使用內部表示UIImage的CGImage與使用您自己創建的CGImage之間會有什麼區別。我想他們會完全相同。

+0

關於您的第一點,檢測PNG和JPG之間的差異幾乎是即時的。這些類型中的每一個在文件的前面都有魔術代碼,可以快速比較以確定它是什麼類型。 – NilObject 2009-04-07 17:58:25

+0

是的,這就是我所指的,但我的觀點更多的是我實際上並不知道蘋果公司實施的文件類型確定是什麼,所以我不能肯定地說這就是他們這樣做的決心。 哦,顯然,根據圖像類型,加載時間或首次渲染時間會有很大差異。某些圖像類型比其他圖像類型解碼更快。 – 2009-05-04 14:50:19

1

我剛剛試過這個,使用純CoreGraphics加載圖像而不是使用UIImage,在一次加載很多圖像時顯着提高了速度。

-1

「我只是試過這個,使用純CoreGraphics加載圖像而不是使用UIImage在一次加載很多圖像時顯着提高了速度。」

你是怎麼避免使用UIImage的?或者更確切地說,如何在不通過UIImage的情況下直接將圖像文件加載到CoreGraphics中?

-1

爲什麼不使用UIImage -imageNamed:加載圖像的一個原因是它們存儲在內部緩存中,並且緩存在低內存情況下不會被清除。