為什麼要在自己的初始化方法里調用[super init]

tags:    時間:2013-12-03 21:41:13
我知道字面意思大概是完成父類的初始化,看看返回的是不是nil如果是nil就無法實現自己的初始化方法。
可不可以這樣理解,就是自己的初始化方法其實和普通的方法一樣,只有調用了在NSObject里的init方法后才能叫做自己的初始化方法
其實我還不是特別理解,希望又大神可以指導一下
------解決方案--------------------
引用
我知道字面意思大概是完成父類的初始化,看看返回的是不是nil如果是nil就無法實現自己的初始化方法。
可不可以這樣理解,就是自己的初始化方法其實和普通的方法一樣,只有調用了在NSObject里的init方法后才能叫做自己的初始化方法
其實我還不是特別理解,希望又大神可以指導一下


其實就是一個類繼承,子類調用父類的方法,因為你重載了父類的init函數,正常情況下,在對象初始化時就會進入你的init方法,父類的方法不會被調用到,而父類有一些初始化操作也是必須執行的,因此這種時候,就優先讓父類初始化完畢,在執行子類自己的方法。
------解決方案--------------------
是不是像這樣的方法
- (id) initWithAge:(int)age;
如果寫成這樣
- (id) a :(int)age;
只要是這個方法里最後返回了self就是一個初始化方法了?(ps:我知道這樣的命名是不對的,就是想知道是不是只要是return self,這個方法就是一個初始化方法了???)
------解決方案--------------------
引用
是不是像這樣的方法
- (id) initWithAge:(int)age;
如果寫成這樣
- (id) a :(int)age;
只要是這個方法里最後返回了self就是一個初始化方法了?(ps:我知道這樣的命名是不對的,就是想知道是不是只要是return self,這個方法就是一個初始化方法了???)


不是的,跟名字,返回值都沒關係,就看你的方法是不是用來初始化的,僅此而已。
如果你約定了- (id) a :(int)age;是你這個對象的初始化方法,那麼- (id) a :(int)age;就是初始化方法。
NSObject的初始化方法是-(id)init,所以後續的繼承也就有了這個初始化方法,無非如果你的子類沒實現-(id)init,那麼將直接會調用到父類的-(id)init。
------解決方案--------------------
謝謝你的回答!
------解決方案--------------------
@dream238,回答得非常到位!!!

推薦閱讀文章

Bookmark the permalink ,來源:互聯網