Objective-C語言的 if ( self = [super init] )

來源:互聯網
上載者:User

標籤: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] )

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.