我正在爲iPhone應用程序製作圖形效果,該效果可以模擬從舊的demoscene日子開始的低分辨率等離子體效果。屏幕上有600個正方形,儘可能快地更新。因爲我使用的CoreGraphics(現在),我可以得到一個非常穩定的11FPS沒有凍結 -什麼讓NSArray訪問速度如此之慢?
但是當我嘗試添加一個簡單的NSArray查找時,iPhone以及模擬器每幾秒凍結幾秒鐘秒。我已經在儀器中運行了它,它說有一個泄漏 - 泄漏與NSAutoReleasePool有關,但這並沒有什麼幫助。 (我在每個更新幀開始時創建一個NSAutoReleasePool,並在最後抽取池。)
通過消除過程,我已經能夠將它縮小到一行,導致放緩。此行會爲每個600個精靈的每一幀更新:
//SLOOWWWNESS /LEAKING NSAUTORELEASEPOOL IS here (freezing every second or so)
UIColor *color = [palette objectAtIndex:colorNum];
//BUT DOESNT HAPPEN HERE... (works at full speed)
UIColor *color = [UIColor colorWithRed:0.25f green:0.25f blue:colorNum/15.0 alpha:1.0f];
...這裏的調色板是在精靈一個NSArray的屬性,包含我創建的UIColor對象的列表。這個UIColor對象數組只創建一次,當應用程序啓動時,所有精靈都使用相同的數組。
任何人有任何想法?
你可以在這些調用的地方發佈更多代碼嗎?從數組中獲取對象應該很快,至少與創建一個新的UIColor對象一樣快 – kubi 2010-09-16 17:09:16
嗨Kubi在下面看到,它畢竟是一個索引超出界限的錯誤。衛生署! – avance 2010-09-16 18:02:08