【问题标题】:How do I interrogate a Class in a typesafe way?如何以类型安全的方式询问类?
【发布时间】:2010-07-15 01:31:30
【问题描述】:

假设我有一个采用类的方法,它的调用方式如下:

[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 对象都只是单个元类的实例?

【问题讨论】:

    标签: objective-c cocoa oop


    【解决方案1】:

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

    具体可以在类对象上调用conformsToProtocol:如:

    [ typeClass conformsToProtocol: @protocol( MyProtocol ) ];
    

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

    [ typeClass instancesRespondToSelector: @selector( MyNeatMethod ) ];
    

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2016-09-03
    • 2023-03-20
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多