假设我们正在iPhone程序中编写一个类(我们称之为Class)。在那里的所有样本中,init方法通常声明如下:
-(id) initWithFoo: (Foo *) foo
我的问题是:执行以下操作会更合乎逻辑吗?为什么或为什么不呢?
-(Class *) initWithFoo: (Foo *) foo
答案 0 :(得分:3)
Mac Dev Center上的Implementing an Initializer
这样做的原因是id表示该类是故意不被考虑的 - 该类是未指定的并且可能会发生变化,具体取决于调用的上下文。例如,NSString提供了一个方法initWithFormat:。但是,当发送到NSMutableString(NSString的子类)的实例时,该消息返回NSMutableString的实例,而不是NSString。 (另请参阅“组合分配和初始化”中给出的单例示例。)