2010-07-15 29 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

相关问题