2011-05-01 39 views
4

我一直在瀏覽素描,他們在Xcode附帶的例子程序,我不斷看到這樣的事情(不總是儘管):爲什麼在調用類方法之前通過+(Class)類發送一個類?

[[MyClass class] classMethod] 

現在,由於MyClass不是類的實例,我只想做:

[MyClass classMethod] 

作爲一個實驗,雖然,我是能夠使上述兩個語句之間的差異,通過重寫+ (Class)class並返回另一類!如果你想這樣做,你會需要以前的版本,所以我可以看到有可能是一個用法,但真的有嗎?

這聽起來像一個可怕的想法篡改這樣的+class,但請賜教,如果有。謝謝!


要看到一些例子,在Developer/Examples/Sketch/發現草圖程序檢查出的方法-copy:SKTGraphicsView.m

回答

5

在你引用的情況下,我真的沒有看到有任何好的理由叫+class。但是,確實有的情況下調用[[self class] doSomething]而不是[[MyClass class] doSomething]。在第一種情況下,如果對象已被分類,[self class]可以返回正確的結果。在第二種情況下,您將始終獲得MyClass類對象,這意味着MySubClass無法有效覆蓋+doSomething類方法。

+0

我同意,但我仍然對引用案例中發生的事情感到困惑。我的意思是,你可以做類似這樣的事情,通過繼承'MyClass',然後重載'+ class'來指向新的類。儘管如此,這並不是我的優秀設計。 – 2011-05-01 22:50:31

+0

我接受這個答案,因爲我不認爲他們使用'+ class'有什麼特別好的理由。感謝您的輸入! – 2011-05-06 15:18:58

0

在這種情況下使用+class沒有什麼好的理由。 +class只是返回它被調用的對象(類對象),與-self相同。在大多數情況下,人們使用[SomeClass class]來獲取類的類對象,因爲類的名稱不是表達式,只能在消息調用語法中作爲接收者使用。因此,在所有其他上下文中,它們使用[SomeClass class]來將類對象作爲表達式來使用(儘管[SomeClass self]也同樣適用)。

在你顯示的情況下,它是多餘的,因爲它是一個消息的接收者。我猜測他們是出於習慣或無知(他們認爲你必須編寫[SomeClass class]來使用該課程)。

相關問題