1. 程式人生 > >OC中自定義init方法

OC中自定義init方法

dag 一個 主函數 his 括號 聲明 實現 初學 沒有初始化

---恢復內容開始---

我們知道,在函數中實例化一個對象,大多數會同時進行初始化,如 Person *p =[ [Person alloc]init];

此時已經進行了初始化,使用init方法,那麽我們能不能重寫init方法呢,讓它可以在初始化的時候直接賦值,可以從內部賦值也可以從外部賦值。我們先把代碼寫出來然後進行分析:

-(id)init
{
if (self = [super init]) {

self.age = 30;
}
return self;
}

在這塊代碼中,除去self.age = 30;該結構是構造方法的固定模式。在這裏我們不得不提及 self,self可以用來調用方法,類方法和實例方法都可以用self調用,那麽self是什麽?我們不需要知道self是什麽,因為self時刻在變,一句話,當前的方法是誰在調用,self就是誰。self類似於C++和Java中的this,大家可以參照理解。我們來實例化一個對象,P在此處的代碼中,self指的是 p ,因為age是p的屬性。這塊代碼,-(id),指的是任何類型,假設我們不知道返回值self是什麽類型,我們也不必擔心,因為-(id)可以指代任何類型。if(self = [super init]),括號內是對self進行初始化,括號外是if,意思是初始化成功才向後執行,失敗則直接返回,系統回收已分配的資源。幾乎沒有初始化失敗的情況,但我們為了避免失敗,還是要進行判斷。在隨後對年齡進行賦值,年齡為30,在這個方法中,我們是從內部對年齡進行初始化,直接在.m文件中直接實現,不需要在.h文件中先聲明。在主函數實例化對對象的時候,對象的年齡就是30,而不需要另外賦值。這是內部初始化,還有外部初始化。外部初始化需要在.h文件中聲明,然後在.m文件中實現。我們來看具體代碼:

//聲明

-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge;

//實現

-(id)initWithName:(NSString *)aNme andAge:(NSInteger)aAge{

    self.name = aName;

    self.age = aAge;

}

我們在主函數中進行實例化對象的時候,選擇我們自定義的方法,由我們手動控制需要初始化的值從而完成初始化,這就是外部賦值。本人是初學者,大家有問題都可以進行評論我們共同解決。感謝閱讀。

---恢復內容結束---

OC中自定義init方法