OC中自定義init方法

---恢復內容開始---函數

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

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

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

        self.age = 30;
    }
    return self;
}

it

在這塊代碼中,除去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{return

    self.name = aName;

    self.age = aAge;

}

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

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

相關文章
相關標籤/搜索