2015-07-01 54 views
2

我試圖儘可能快地保持我的func update:currentTime。這個函數被SKScene類覆蓋,每秒被調用大約2000到4000次。我想遍歷所有場景的子節點,並執行可選的類型轉換來查看子節點是否實現了我的接口,然後調用update。注:我在此參考兩個獨立的func update方法。快速類型轉換性能成本

如果我每秒輸入4000次,是否會出現我的表現? 更重要的是,Swift中的類型轉換有多昂貴?

代碼方面:

// Called inside func update:currentTime 
let children = self.children 
    for child in children { 
     if let observer = child as? TimerObserver { 
      observer.update() 
     } 
    } 

謝謝!

+0

唯一真正的答案是使用儀器並實際測量它。它需要在發佈版本上測量。 – zaph

回答

2

這取決於。從例如由於編譯器將創建實際代碼以將其轉換爲另一個代碼,因此編譯器將編譯爲intfloat

相比之下,對象類型轉換是免費的。只是最終一個方法調用會失敗,因爲演員類型不是你所說的那樣。這只是假裝對象指針將指向某個合法對象。指針本身沒有改變。

+0

我不明白,如果演員陣容可能會失敗,那麼它對演出沒有什麼影響?是否沒有涉及任何類型的檢查? –

+2

由於程序員錯誤造成的轉換失敗不會被轉換。 WRT表現的問題在於它是一個真正的演員,還是創建一個新的表示形式作爲一個浮點數,甚至是一個整數。一方有運行時成本,另一方不具有運行成本,只是以不同的方式來看待事情。問題至少可以追溯到「C」語言,其中實際轉換和真實演員都是命名演員。 – zaph

+0

正確。這種類型檢查(對於合法的方法)在兩種情況下都是在對象的情況下完成的。所以在性能上沒有差別。 –