一、構造方法的作用:
構造方法是用來初始化物件的方法,是個物件方法,-開頭。構造方法只有乙個作用,就是初始化成員變數。當乙個物件初始化的時候需要有預設值,就可以用到構造方法。
二、構造方法的原則:
成員變數屬於哪個類,就在哪個類那裡進行初始化。父類的屬**給父類方法去處理,子類方法處理子類自己的屬性。
三、構造方法的應用場景:
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...