2010-03-28 68 views
6

我正在考慮引入:在Objective C中使用isKindOfClass的性能損失是多少?

if ([myInstance isKindOfClass:[SomeClass class]]) { do something...} 

成一段代碼,被調用非常頻繁。我會否引入顯着的表現懲罰?在Objective C中,是否有更快的方法來評估給定對象實例是否具有某種類型?例如,以下更快? (我知道的測試有所不同)

if (myInstance.class == [SomeClass class]) { do something else...} 
+6

什麼你分析的結果告訴你嗎? – 2010-03-28 22:05:26

+0

我還沒有做任何分析;這是我的下一步。我希望找到一些文檔來解釋Objective C中的類的基本魔法,然後再進入盲目的性能測試。然而,我還沒有找到任何東西,所以我下一步就嘗試不同的排列方式。關於如何識別給定實例的類類型的任何建議? – durcicko 2010-03-28 22:33:13

+0

沒有盲目性能測試......只有盲目優化!此外,Obj-C運行時每次調用方法時都會根據對象的類來決定調用哪種方法,因此請利用該方法將{do something ...}放在您感興趣的類的某個方法上 – codewarrior 2010-03-29 00:52:55

回答

4

的最快的方法,如果兩個對象是同一類的是比較他們的isa指針。然而,這意味着當一個對象的類是另一個對象的類的子類時,你會錯過,這正是isKindOfClass:的意思。

無論如何,你在談論的優化已經在這裏完成:

http://www.mulle-kybernetik.com/artikel/Optimization/opti-3-imp-deluxe.html

+0

這正是我正在尋找的信息的類型。謝謝你指出我的方向。 – durcicko 2010-03-29 17:04:55

+0

有人告訴我,Apple不希望你直接使用'isa'指針。 – funroll 2014-02-09 17:53:46

相關問題