Objective C 11 構造方法

2021-06-28 15:45:31 字數 3084 閱讀 6204

一、構造方法的作用:

構造方法是用來初始化物件的方法,是個物件方法,-開頭。構造方法只有乙個作用,就是初始化成員變數。當乙個物件初始化的時候需要有預設值,就可以用到構造方法。

二、構造方法的原則:

成員變數屬於哪個類,就在哪個類那裡進行初始化。父類的屬**給父類方法去處理,子類方法處理子類自己的屬性。 

三、構造方法的應用場景:

3.1 new方法的呼叫

new方法是乙個類方法,它是alloc類方法和init物件方法的連合體,相當於new方法內部呼叫了alloc方法和init方法。因此當有重寫init方法時,呼叫new方法時,它內部就會呼叫init方法進行初始化。一般使用類似於:person *p=[person new];完整地建立乙個物件會有以下兩個步驟:

1>分配儲存空間(new方法內部呼叫+alloc)

`2>初始化  (new方法內部呼叫-init)

3.2 重寫-init方法

1>init是乙個物件方法,可以通過類似於:person *p=[[person alloc] init];來顯式地呼叫init方法進行初始化。

2>重寫init方法,在方法內部開頭一定要呼叫回super的init方法,來對父類中宣告的一些變數和屬性進行初始化。

呼叫super的init方法成功後,才有必要進行接下來的初始化。

初始化成功後返回乙個已經初始化完畢的物件。

3>子類重寫父類的init方法,只需要初始化自己宣告的成員變數。父類的成員變數可以由父類自己進行初始化。這樣可以避免當父類成員變數名有所改動時,而導致的連環改動。

3.3 自定義構造方法

1>當需要通過外部傳遞引數給構造方法進行指定成員變數的初始化時,就需要用到自定義構造方法。這種初始化方式比較靈活。

2>自定義構造方法的規範:一定是物件方法,一定以-開頭;返回值一般是id型別;方法名一般以initwith開頭。

3>當需要初始化父類的成員變數時,盡量使用父類提供的構造方法進行初始化父類的成員變數。

#import @inte***ce person :nsobject

@property int age;

@property nsstring *name;

//返回值是id型別

-(id)initwithage:(int)age;

-(id)initwithname:(nsstring *)name;

-(id)initwithage:(int)age andname : (nsstring *)name;

@end

@implementation person

//重寫init方法,在方法內部開頭一定要呼叫回super的init方法,來對父類中宣告的一些變數和屬性進行初始化。呼叫super的init方法成功後,才有必要進行接下來的初始化。初始化成功後返回乙個已經初始化完畢的物件。

- (id)init

//返回乙個已經初始化完畢的物件

return self;

}/*這種方式比較繁瑣,一般採用上面那種方式重寫構造方法

-(id)init

//返回乙個已經初始化完畢的物件

return self;

}*//* 自定義構造方法的實現

自定義構造方法的規範:

1.一定是物件方法,一定以-開頭;

2.返回值一般是id型別;

3.方法名一般以initwith開頭。

*/-(id)initwithage:(int)age

return self;

}-(id)initwithname:(nsstring *)name

return self;

}-(id)initwithage:(int)age andname : (nsstring *)name

return self;

}@end

@inte***ce student : person

@property int no;

-(id)initwithname:(nsstring *)name andage : (int)age andno : (int)no;

@end

@implementation student

//注釋與person重寫init方法一樣,person重寫了nsobject的init方法

- (id)init

return self;

}// 父類的屬**給父類方法去處理,子類方法處理子類自己的屬性

-(id)initwithname:(nsstring *)name andage : (int)age andno : (int)no

return self;

}/* 這種採用self來初始化父類成員變數的方式比較少用

- (id)initwithname:(nsstring *)name andage:(int)age andno:(int)no

return self;

}*/@end

int main()

輸出結果:

2015-02-07 09:41:51.878 a.out[534:13741] 通過new方法獲得這個人20歲了

2015-02-07 09:41:51.880 a.out[534:13741] 通過init方法獲得這個人20歲了

2015-02-07 09:41:51.880 a.out[534:13741] 子類物件student重寫init方法之後,學號是1,年齡是20

2015-02-07 09:41:51.880 a.out[534:13741] 通過自定義構造方法initwithage方法獲得這個人11歲了

2015-02-07 09:41:51.881 a.out[534:13741] 通過自定義構造方法initwithname方法獲得這個人0歲了,名字是jack

2015-02-07 09:41:51.881 a.out[534:13741] 通過自定義構造方法initwithageandname方法獲得這個人12歲了,名字是tom

2015-02-07 09:41:51.881 a.out[534:13741] 子類物件student重寫initwithageandnameandno方法之後,學號是2,年齡是15,名字是jim

Objective C構造方法

構造方法 用來初始化的方法 之前我們建立物件的方式一直是使用 new 但是使用new建立的物件,都是給我們預設做了初始化的。有的時候,我們需要按照我們自己的需求進行初始化,那麼怎麼做呢 首先了解一下,我們使用new建立物件的時候,都做了什麼事情。分配儲存空間 alloc 呼叫類方法alloc來給物件...

Objective C基礎 id 構造方法

一 id id是萬能指標,能指向任何oc物件,相當於nsobject id型別的定義 typedef struct objc object id id的使用 id後面不要加 因為id本身就是指標型別 id p 類名 new id的侷限性 如果呼叫乙個不存在的方法,編譯器會立馬報錯 二 構造方法 1....

11 建構函式

建構函式 也叫構造器 寫移動端的經常用建構函式 也叫構造器 在物件建立的時候自動呼叫,一般用於完成物件的初始化工作struct person 初始化,帶引數 person int age int main 後面注釋寫明了呼叫哪乙個初始化構造器 列印結果 person int age 20 perso...