2010-03-19 41 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