假设我有一个接受类的方法,就像这样调用:
[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对象都只是单个元类的实例?
答案 0 :(得分:2)
类型Class也是一个对象,可以在其上调用方法。清单5在this Apple example中显示了一些可以在Class对象上调用的方法示例。
具体来说,您可以在类对象上调用conformsToProtocol:例如:
[ typeClass conformsToProtocol: @protocol( MyProtocol ) ];
或者你可以使用instancesRespondToSelector:来查看这个类的实例是否实现了选择器。
[ typeClass instancesRespondToSelector: @selector( MyNeatMethod ) ];
请注意,在Class对象上调用respondsToSelector:将测试该类实现的类方法,而不是该类的实例方法。