如何以类型安全的方式查询班级?

时间:2010-07-15 01:31:31

标签: objective-c cocoa oop

假设我有一个接受类的方法,就像这样调用:

[registry registerClass:[MyClass class]];

如何查询-registerClass:内的课程?

-(void) registerClass:(Class)typeClass {

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

    // ?

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

这是“?”我在想。我可以安全(并且始终)将Class foo转换为NSObject *fooObj并发送消息,假设foo将始终是NSObject的子类吗?是否存在所有NSObject元类继承的根元类?或者所有Class对象都只是单个元类的实例?

1 个答案:

答案 0 :(得分:2)

类型Class也是一个对象,可以在其上调用方法。清单5在this Apple example中显示了一些可以在Class对象上调用的方法示例。

具体来说,您可以在类对象上调用conformsToProtocol:例如:

[ typeClass conformsToProtocol: @protocol( MyProtocol ) ];

或者你可以使用instancesRespondToSelector:来查看这个类的实例是否实现了选择器。

[ typeClass instancesRespondToSelector: @selector( MyNeatMethod ) ];

请注意,在Class对象上调用respondsToSelector:将测试该类实现的类方法,而不是该类的实例方法。