代码之家  ›  专栏  ›  技术社区  ›  Sophistifunk

我如何用类型安全的方式询问一个类?

  •  1
  • Sophistifunk  · 技术社区  · 14 年前

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

    [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 并发送IT消息,假设foo始终是nsObject的子类?是否存在所有nsObject元类继承自的根元类?或者所有类对象都只是单个元类的实例?

    1 回复  |  直到 14 年前
        1
  •  2
  •   dfrankow    14 年前

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

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

    [ typeClass conformsToProtocol: @protocol( MyProtocol ) ];
    

    或者可以使用InstancesResponsedToSelector:查看此类的实例是否实现了选择器。

    [ typeClass instancesRespondToSelector: @selector( MyNeatMethod ) ];
    

    请注意,对类对象调用respondstoselector:将测试类实现的类方法,而不是类的实例方法。