1樓:匿名使用者
我只能說盡力嘗試用不晦澀的方式為你解釋
我們先假設現在自己建立了個類,我們起名叫myobject,繼承於nsobject。
繼承知道吧,就是你這個子類(myobject)如果什麼都不寫的話,和父類(nsobject)就是一模一樣的。
oc裡幾乎所有的類的根源都是nsobject,都是在nsobject的基礎上增加成員變數、函式。
父類不是你自己寫的類,你不敢保證它是安全的,能否成功初始化,你有可能不知道裡面是什麼樣子的。
self = [super init],你可能對這步做法可能難以理解。self指向了父類初始化的記憶體位址。類的初始化函式如果失敗會返回nil,隨後self也為nil。
那麼 if(self = nil),你往下的初始化工作都是對nil做的,初始化失敗。
如果你還想有更深的理解請看下面一段我為你摘抄的:
父類進行初始化時,用的是子類物件指標self,父類的init方法有可能對這個指標指向的記憶體區作了大的變更(有可能把這個指標所指的記憶體釋放了,重新分配了另一塊記憶體區域返回來,這時這個返回的指標與原來的指標是指向不同位址的),所以父類初始化後要重新返回指標。父類返回的和子類的self的型別都為id型別(通用型別)。父類的init方法若返回的指標與self不一樣,在父類的init方法中已作了release和新的記憶體分配,不需要自己再去release self,直接用父類init方法返回的指標就可以了。
希望能夠幫助你理解,但同時希望你在初期階段不要鑽牛角尖,要快速向前推進。等累積足夠的經驗以後,回頭再來看會更容易理解
if ( self = [super init] )
return self;
2樓:
基類裡面是不需要這個的,都是在子類裡面才用得到。[super init]是使用父類進行初始化,看看父類能不能被初始化,如果不能被初始化,子類就沒法繼承父類的屬性和方法了。這個子類就沒意義了,不能擁有父類的屬性。
所以,在這個地方加上if(self = [super init]),就是用來判斷這個的。不能繼承的話,就直接返回空物件(沒有意義)。
3樓:
相當於if ( self = [super init] && self != nil )而已
在objective-c中何時使用self = [super init],為什麼要使用 self
4樓:貓餅餅
self = [super init]一般只用於init方法中,完整的初始化函式一般是這樣的:
-(id)init
return self;
}因為nsobject 都有-(id)init;方法,當你的類直接或者間接繼承了nsobject時,在重寫該方法時都要[super init] 這也是為什麼一般在-(void)viewdidload;方法中的第一句是[super viewdidload];
補充一點:
在初始化的時候,失敗了會返回nil,所以在你做任何工作的時候,都要首先保證self不是nil。
語言和非語言溝通的重要性,語言溝通與非語言溝通的關係
非語言交流是一種可以相互溝通的無聲語言,功能作用就是傳遞資訊 溝通思想 交流感情。非語言交流在溝通中的地位十分重要,從心理的各層面影響我們對一個人的印象和判斷,而儘可能地做好這些非語言因素能使使用者在溝通中佔據主動,也使結果朝使用者預期的方向發展。語言是傳遞資訊的符號,包括所說的話和所寫的字。要注意...
c語言基礎,c語言是所有語言的基礎嗎
長沙新華電腦學院 不是的,c語言只是相對基礎而已 洋洋 你朋友所說的基礎,並不是相對計算機來說的,而是相對你的學習。學會了c語言再學其他現在主流編成語言都不會出現根本聽不懂的情況。 真龍的傳人 說法有問題。最基礎的語言是組合語言。不過,太難理解了。c語言嚴格講,也屬於比較低層的高階語言。但它不是萬能...
C語言AA的意思C語言 的意思,c語言中c a是什麼意思
博爾思拓 首先你要明白什麼是表示式,還有變數。a是乙個變數。a a都是a加了1.比如a原來是1,執行了a 或 a後,a變數的值就是2了 至於a 和 a的區別主要是在表示式上的區別。a是先執行了a加1後,參與表示式的計算。a 是a先參與表示式的計算,後執行自加1.比如 int a,b a 1 如果你想...