我還是不明白self = super init; ,雖然我讀了很多書和Google。 我知道它用於檢查當前對象等於來自父類的返回對象等。 但是,我不能接受這是答案。有人能給我一個簡單但堅實的可以接受的答案嗎? 謝謝!任何人都可以給我一個關於「self = super init」的簡單解釋嗎?
回答
快速的回答是,你告訴你的類的超類初始化對象。因爲您從該超類繼承,那麼您可以執行特定於您的實現的其他初始化任務,但首先必須確保執行初始化的基礎知識(由基類NSObject處理)。每個從另一個類繼承(繼承)的類必須確保它們的超類在初始化之前已經被初始化。
一個非常快速的(因此可能相當差)模擬 - 在你可以創建之前,你的父母必須創建(超級類),他們必須首先創建他們的父母(他們的超類)
我建議你搜索麪向對象的編程基礎知識來了解這類事情。
NSObject是根類。 https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html 你可以在那裏找到一個init
方法。在NSObject
類中的init
方法是Objective-C中每個對象的初始化程序。 super
只是返回一個對象的超類。
如果Class B
繼承自Class A
,Class A
將是超類Class B
。繼續從Class B
繼承的另一個類Class C
,Class C
的超類將爲Class B
。等等。
當你從一個類呼叫[super init];
時,它只需調用其超類的方法init
,然後調用其超類的方法init
等等。最後它會到達根對象NSObject,並調用真正的方法init
。此時,iOS將爲您的對象分配內存,併爲您的對象分配必要的數據結構。閱讀有關NSObject類中每個方法和屬性的文檔。
如果您創建了類MyView
,它是UIView
的子類,則您的類層次結構將爲。
NSObject
UIAppearanceContainer
UIAppearance
NSCoding
UIView
MyView
所以,當你調用init
方法在你的類 'MyView的',它會調用
的UIView
的init方法的UIView將調用NSCoding
的init方法NSCoding會調用初始化UIAppearance的方法
UIAppearance將調用UIAppearanceContainer的初始化方法
UIAppearanceContainer將調用NSObject的init方法。
在上面的例子的第二步,UIView會自動調用NSCoding的init方法,或者我們需要在UIView中編寫另一個self = super init? – user1232250 2012-04-12 13:46:31
在UIView裏面有一個調用self = [super init]和每個方法一樣 – rakeshNS 2012-04-12 13:53:11
我想知道這個答案有什麼問題。請輸入你的評論(向誰投下了這個答案:))。 – rakeshNS 2012-05-28 10:47:57
您提到的「檢查」讓我覺得您看到=
作爲比較操作。不是。這是一項任務。有時,分配會出現在if
條件中。這是利用賦值表達式具有值的事實 - 分配的值。因此,if (self = [super init])
結合了「超級的呼叫-init
方法」,「分配結果到self
」,和「檢查我們是否從超級的-init
」(即,超級未初始化)得到非零。
因爲這種組合分配和測試可能會造成混淆,而且容易出錯,Apple現在建議從退房分離失敗的任務:
self = [super init];
if (self)
// ... continue initializing ...
是非零等於零? – user1232250 2012-04-16 14:41:32
在C中,對於布爾測試,任何非零值都爲true。 NULL指針和'nil'轉換爲零,因此布爾測試爲false。 – 2012-04-16 20:43:33
- 1. 任何人都可以解釋這個jQuery插件給我嗎?
- 2. 任何人都可以解釋這個matlab代碼給我嗎?
- 3. 任何人都可以解釋關於Java中的iReport嗎?
- 4. 任何人都可以解釋OAuth嗎?
- 5. 任何人都可以幫助解釋「get:function()」和.prototype給我嗎?
- 6. 任何人都可以解釋這個簡單的Javascript行爲?
- 7. 任何人都可以解釋我StandardScaler?
- 8. <JSP,JQuery>任何人都可以解釋這個簡單的代碼嗎?
- 9. 任何人都可以解釋我這個代碼行嗎?
- 10. 任何人都可以向我解釋這個sed命令嗎?
- 11. 任何人都可以用英語向我解釋這個嗎?
- 12. 任何人都可以解釋這個C++循環爲我嗎?
- 13. 任何人都可以解釋我這個功能嗎?
- 14. 任何人都可以解釋我這個javax swing方法嗎?
- 15. 任何人都可以幫我解釋這個python代碼嗎?
- 16. 任何人都可以向我解釋這個SOQL查詢嗎?
- 17. 任何人都可以解釋我這個makefile嗎?
- 18. 任何人都可以給我一個關於ITelephony.aidl的清晰想法嗎?
- 19. 任何人都可以給我一個簡單的解釋如何實現這個jQuery插件?
- 20. Self = [super init]
- 21. if((self = [super init]))?
- 22. 任何人都可以解釋我的這段代碼嗎?
- 23. 任何人都可以用簡單的方式解釋多態性嗎?
- 24. 任何人都可以用簡單的例子來解釋計數器嗎?
- 25. 任何人都可以解釋關於MongoDB GridFS功能?
- 26. 任何人都可以解釋一下微軟的CDN嗎?
- 27. 任何人都可以解釋這個程序的輸出嗎?
- 28. 任何人都可以給我一些關於crystalreport的信息嗎?
- 29. 任何人都可以通過ConcurrentModificationException解釋我嗎?
- 30. Javascript:任何人都可以解釋我這段代碼嗎?
+2的答案,-1視覺我的父母:) – jmstone617 2012-04-12 13:21:50