2010-03-19 40 views
2

假设我们正在iPhone程序中编写一个类(我们称之为Class)。在所有的样品摆在那里,在init方法通常声明如下:iPhone init方法返回类型

-(id) initWithFoo: (Foo *) foo 

我的问题是:做以下会是更符合逻辑?为什么或者为什么不?

-(Class *) initWithFoo: (Foo *) foo 

回答

3

Implementing an Initializer对Mac开发中心

这样做的原因是,ID给出的指示类是故意不考虑,这个类是不确定的,如有更改,根据上下文的调用。例如,NSString提供了一个方法initWithFormat :.但是,当发送给NSMutableString(NSString的一个子类)的实例时,该消息返回NSMutableString的一个实例,而不是NSString。 (另请参阅“合并分配和初始化”中给出的单例示例。)

+0

另一种考虑它的方法是子类。你使用'id',所以你可以使用相同的初始化器作为子类,因为它是超类。 – 2010-03-19 22:47:05