2012-04-09 86 views
1

我是新的目標c。我明白-init()是一個instance method並返回一個對象 例如, myObj=[myObj init];將返回一個對象myObj.Objective-c是超級初始化類方法還是實例方法?

但是,如果self =[super init];正常super refer to parent類,例如, NSObject這是一個class, not instance

所以,Is -init() instance method or class method for super init?

感謝

回答

3

init是一種實例方法。你在super上調用它的事實不會改變它。

請記住,super不代表您的對象的類,但您的對象在類層次結構中被視爲其父類的實例。

而你永遠不會打電話給myObj=[myObj init]; - 你打電話myObj = [[MyObj alloc] init]。注意myObj(一個變量)和MyObj(該變量是一個實例的類)之間的情況差異。

+0

那麼,什麼是父類的實例對象,即在NSObject類?通常在父類中沒有創建實例! – user1232250 2012-04-09 11:35:21

+0

這就是面向對象編程的概念。當您將類MyObj聲明爲NSObject的後代類時,這意味着每次創建MyObj的實例時,它都是NSObject本身的一個實例。讓我們說遺傳就像遺傳學一樣:男性人類是人類的「亞類」,它們是靈長類動物的亞類,哺乳動物的亞類是動物的亞類。僅僅因爲你是一個「男性人」,意味着你也是一個「人」,「靈長類」,「哺乳動物」和「動物」。 – Cyrille 2012-04-09 11:39:32

+0

我現在明白了,謝謝! – user1232250 2012-04-09 11:47:00

1

一般init以這種方式alloc後使用:

MyObject* obj = [[MyObject alloc] init]; 

alloc創建對象實例,所以init是一個實例方法,當你重寫它,總是調用父類init是個好習慣。

試着讀這個article

1

Super指的是當前的對象中父類的方法。調用super init將調用當前對象(self)上的方法init,但將使用超類的實現。因此, - init不是一種靜態方法(由於在init方法之前有+,所以這是可見的)。即使它不是靜態的,你也可以致電super whatMethodYouWantFromSuperclass。不在對象(self)上調用靜態方法,但在類上調用([NSObject yourStaticMethod])。

相關問題