iphoneinit方法返回类型

iphoneinit方法返回类型,iphone,initialization,Iphone,Initialization,假设我们正在iPhone程序中编写一个类(我们称之为类)。在所有示例中,init方法通常是这样声明的: -(id) initWithFoo: (Foo *) foo 我的问题是:这样做是否更符合逻辑?为什么 -(Class *) initWithFoo: (Foo *) foo 来自Mac开发中心 这样做的原因是,id表示该类故意不被认为是未指定的,并且可能会根据调用的上下文进行更改。例如,NSString提供了initWithFormat:方法。但是,当发送到NSMutableString

假设我们正在iPhone程序中编写一个类(我们称之为类)。在所有示例中,init方法通常是这样声明的:

-(id) initWithFoo: (Foo *) foo
我的问题是:这样做是否更符合逻辑?为什么

-(Class *) initWithFoo: (Foo *) foo
来自Mac开发中心

这样做的原因是,id表示该类故意不被认为是未指定的,并且可能会根据调用的上下文进行更改。例如,NSString提供了initWithFormat:方法。但是,当发送到NSMutableString的实例(NSString的子类)时,消息返回的是NSMutableString的实例,而不是NSString。(但也请参见“组合分配和初始化”中给出的单例示例。)


另一种思考方法是子类。您可以使用
id
,这样就可以对子类使用与其超类相同的初始值设定项。