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

时间:2010-07-09 05:42:47

标签: objective-c class subclass shared

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

但是......实施起来怎么样?

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

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

  + (id) somethingLikeNew{
        return [[NSObject alloc] init];  
    }

而是这......

  + (id) somethingLikeNew{
        return [[<SomethingThatMapsToFooClassType> alloc] init];  
    }

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

基本上我正在添加NSObject的类别,我有共享方法需要知道类型,但实现都是通用的,因此在NSObject上的类别中而不是在我的类文件中的所有位置(就像你在整个地方没有'新'一样。它就在那里。)

任何? Bueller? Bueller?

中号

2 个答案:

答案 0 :(得分:7)

在任何Objective-C方法中,self(隐式)参数指的是接收者。对于类方法,selfClass对象。因此,多态类方法可以像

一样实现
+ (id)somethingLikeNew
{
   return [[self alloc] init];
}

答案 1 :(得分:0)

哈!在发布此消息后两秒钟发现它!你可以在共​​享方法中使用'self'来表示派生类的类类型,所以上面只是......

  + (id) somethingLikeNew{
        return [[self alloc] init];  
    }

该死,这很容易!希望这有助于其他人!

中号