Object-C基礎之初始化方法(init)

前言

Object-C有兩種文件(.h文件 .m文件),“.h”文件需要使用@interface 來定義類的公共方法,而“.m”文件是實現.h文件裏面的公共方法以及封裝一些其他功能私有方法。 這篇文件將要介紹的就是關於“.m”如何自定義實例化的方法

正文

init方法定義在NSObject,而我們自定義的類會直接或者間接的繼承NSObject這個類。 我們在自定義的類中可以重寫這個init方法,也可以自定義自己的初始化方法。
在重寫這個init方法的時候需要遵循apple的規則。 一是必須執行父(super)的初始化方法,如果沒有父初始化方法,則會返回nil

示例代碼

- (id)init {  
   if (self=[super init]) {
       // Initialize self.
   }
   return self;
}

文檔解釋
An object isn’t ready to be used until it has been initialized. The init method defined in the NSObject class does no initialization; it simply returns self.
In a custom implementation of this method, you must invoke super’s designated initializer then initialize and return the new object. If the new object can’t be initialized, the method should return nil. For example, a hypothetical BuiltInCamera class might return nil from itsinit method if run on a device that has no camera.

自定義初始化方法的時候也有一些特別要注意的地方。 先說明一下如何調用自定義初始化方法:比如這句代碼[[NSArray alloc] initWithXXX],這裏因爲使用了alloc,所以後面可以跟上自己自定義的初始化方法(initWithXXX),也可以跟上重寫的init方法。自定義方法的規則就是
1.返回值類型必須是id .
2.必須是init開頭
3.必須調用父的init方法

Object-C還有一種在堆中創建對象的方法:[NSArray class],它和alloc區別就是class只會默認使用init初始化方法,而那些initWithXXX的方法是 無法指定給它的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章