2011-04-18 46 views
4

我在寫一些實時音頻處理代碼,它將在音頻單元的渲染回調中執行。iOS:調用Objective-C方法的處理開銷是多少?

此線程處於系統可識別的最高優先級別。

Apple指示最大限度地減少此次通話中處理的數量。他們的建議之一是避免Objective-C方法的調用。

但是爲什麼?

當調用Objective-C方法時會發生什麼?實際開銷是多少?

+2

這已經在其他堆棧溢出問題中討論過。我相信最詳細的解釋是在@ bbum的博客上:http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/ – 2011-04-18 08:05:39

+0

@Bavarious:你應該提供作爲這篇博文的答案,可能*是對Objective-C方法調用的單一最佳分析。 – DarkDust 2011-04-18 08:08:59

+0

這個鏈接讓我感到驚訝,10分鐘前我以爲我是一名專業的軟件開發人員,現在我感覺自己是一個總共n00b,thx的那個Bav:p – 2011-04-18 08:43:56

回答

8

Objective-C方法的分辨率是動態的。在其他語言如C或C++中,函數調用在編譯時設置,實質上是跳轉到包含該函數的地址。然而,在Objective-C中,方法調用被實現爲「發送消息」,這些消息不能以相同的方式工作。有一個查找過程,而不是硬編碼跳轉。

該查找過程作爲與定位要運行的方法的地址相關聯的開銷。它非常優化,但對於某些類型的代碼,開銷會導致性能問題。

Mike Ash給出了一個great writeup關於Objective-C消息傳遞的情況,如果您對其他細節感興趣的話。

+0

感謝您的明確答案和超級鏈接!完善! – 2011-04-18 08:41:45

相關問題