0

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

但是......这到底是如何实现的?

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

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

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

而是这个...

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

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

基本上我在 NSObject 之外添加一个类别,并且我有需要知道类型的共享方法,但是实现都是通用的,因此进入 NSObject 的一个类别,而不是在我的类文件中的所有地方(同样的方式你没有到处都是“新的”。它就在那里。)

任何人?布勒?布勒?

4

2 回答 2

7

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

+ (id)somethingLikeNew
{
   return [[self alloc] init];
}
于 2010-07-09T05:45:34.067 回答
0

哈!发布后两秒钟我自己找到了它!您可以在共享方法中使用“self”来表示派生类的类类型,所以上面的内容只是......

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

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

于 2010-07-09T05:44:44.443 回答