2010-07-15 63 views
1

比方說,我有一個採用一個類,被稱爲像這樣的方法:如何以類型安全的方式詢問班級?

[registry registerClass:[MyClass class]]; 

如何詢問裏面-registerClass:類?

-(void) registerClass:(Class)typeClass { 

    // Verify that instances of typeClass confirm to protocol/respondsToSelector 

    // ? 

    // Do stuff 
    // ... 
    [myListOfClasses addObject:typeClass]; 
    // ... 
} 

這是「?」我想知道。如果foo永遠是NSObject的子類,我可以安全地(並且總是)將Class foo轉換爲NSObject *fooObj併發送消息嗎?是否有一個所有NSObject元類繼承的根元類?還是所有的Class對象都只是一個元類的實例?

回答

2

類型類也是一個對象,可以調用它的方法。清單5中的this Apple example顯示了可以在Class對象上調用的方法的一些示例。

具體來說,你可以撥打conformsToProtocol:類對象上,例如:

[ typeClass conformsToProtocol: @protocol(MyProtocol) ]; 

或者您可以使用instancesRespondToSelector:看看這個類的實例實現選擇。

[ typeClass instancesRespondToSelector: @selector(MyNeatMethod) ]; 

要知道,調用respondsToSelector:類對象將測試類方法的類實現的,而不是爲類實例的方法。

+0

感謝您的信息,你知道我在哪裏可以找到類的參考?我一直在尋找網絡來尋找一些文檔,而Apple的參考文檔與JavaDoc等更具導航性的東西相比並不完全有幫助。 – Sophistifunk 2010-07-15 03:10:51

+0

蘋果Objective C手冊講述了一些關於類是如何對象的,但並不十分詳細,http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf。 NSObject中的許多類方法應該能夠被調用,但只有一些纔有意義。 http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html。否則,我還沒有找到如何與一個Class對象進行交互的很好的概要。 – 2010-07-15 19:28:17

+0

這個討論很有趣,但也有點抽象,http://cocoawithlove.com/2010/01/what-is-meta-class-in-objective-c.html。 – 2010-07-15 19:28:43