標籤:otto init sel ack elf object font size mon
我們先假設如今自己建立了個類。我們起名叫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;
基類裡面是不須要這個的。都是在子類裡面才用得到。[super init]是使用父類進行初始化,看看父類能不能被初始化,假設不能被初始化,子類就沒法繼承父類的屬性和方法了。這個子類就沒意義了。不能擁有父類的屬性。所以,在這個地方加上if(self = [super init]),就是用來推斷這個的。不能繼承的話。就直接返回Null 物件(沒有意義)。
Objective-C語言的 if ( self = [super init] )