簡體   English   中英

誰能給我一個關於“ self = super init”的簡單解釋?

[英]Can anyone give me an easy explanation about “self=super init”?

我仍然不了解self = super init; ,盡管我讀了很多書和谷歌。 我知道它用於檢查當前對象是否等於父類等的返回對象。但是,我不能接受這就是答案。 有人可以給我一個簡單但可靠的答案嗎? 謝謝!

快速的答案是,您正在告訴您的類的超類初始化該對象。 因為您是從該超類繼承的,所以您可以執行特定於實現的其他初始化任務,但是首先必須確保執行了初始化的基礎(由基類NSObject處理)。 從另一個類擴展(繼承)的每個類都必須先確保其父類已被初始化,然后才能進行初始化。

一個非常快速組成的(因此可能很差)的類似物-在創建您的父母之前,必須先創建您的父母(超類),並且他們必須首先創建父母(他們的超類)

我建議您搜索面向對象的編程基礎知識,以了解這種情況。

您提到“檢查”使我認為您將=視為比較操作。 不是。 這是一項任務。 有時,分配出現在if條件中。 這利用了賦值表達式具有一個值的事實-被賦值。 因此, if (self = [super init])組合了“調用super的-init方法”,“將結果分配給self “檢查我們是否從super的-init得到非零”(也就是說,那個super沒有?無法初始化)。

由於這種組合的分配和測試可能會造成混淆並且容易出錯,因此Apple現在建議將分配與檢查失敗分開:

self = [super init];
if (self)
    // ... continue initializing ...

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 A Class A將是Class B類的超類。 再次另一類Class C ,將其從繼承Class B ,超類的Class C將是Class B 等等。

當您調用[super init]; 從一個類中,它僅調用init類的init方法,而后者又調用init類的init方法,依此類推。 最后,它將到達根對象NSObject,並調用實際的init方法。 到那時,iOS將為您的對象分配內存,並為您的對象分配必要的數據結構。 閱讀有關NSObject類中每個方法和屬性的文檔。

如果創建了MyView類,它是UIView子類,則您的類層次結構將是。

     NSObject

UIAppearanceContainer

   UIAppearance

     NSCoding

      UIView

      MyView

因此,當您在類“ MyView”中調用init方法時,它將調用

UIView的init方法

UIView將調用NSCoding的init方法

NSCoding將調用UIAppearance的init方法

UIAppearance將調用UIAppearanceContainer的init方法

UIAppearanceContainer將調用NSObject的init方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM