在共享objective-c方法中获取类类型?

Mar*_*eIV 0 shared class subclass objective-c

在Objective-C中有Alloc/Init比喻.他们还添加了一个名为"new"的共享便捷方法,内部只是连续调用它们.如果我创建一个名为FooClass的NSObject的子类,FooClass会选择那些共享方法,包括'new'.

但是......实施的是怎么回事?

它不能简单地委托给基类,因为它只是实例化NSObject的实例,而不是派生类FooClass,但它仍然有效!那么有人会怎么写类似的东西?

换句话说,基类不应该是......

  + (id) somethingLikeNew{
        return [[NSObject alloc] init];  
    }
Run Code Online (Sandbox Code Playgroud)

而是这......

  + (id) somethingLikeNew{
        return [[<SomethingThatMapsToFooClassType> alloc] init];  
    }
Run Code Online (Sandbox Code Playgroud)

...其中'SomethingThatMapsToFooClassType'是从NSObject继承并且需要获取共享方法'somethingLikeNew'的派生类的类型.

基本上我是从NSObject添加一个类别,我有共享方法需要知道类型,但实现都是通用的,因此在NSObject上的类别而不是我的类文件中的所有地方(以相同的方式)你到处都没有'新'.它就在那里.)

任何人?Bueller?Bueller?

中号

Bar*_*ark 7

在任何Objective-C方法中,self(隐式)参数指的是接收者.在类方法的情况下,selfClass对象.所以多态类方法可以像

+ (id)somethingLikeNew
{
   return [[self alloc] init];
}
Run Code Online (Sandbox Code Playgroud)