1.如果一個(gè)類沒(méi)有實(shí)現(xiàn)init方法,那么在調(diào)用init初始化的時(shí)候所有成員變量都會(huì)被初始化為0
2.覆蓋NSObject的init方法,instancetype代表返回當(dāng)前類的實(shí)例,在舊版本OC里,還會(huì)使用id作為返回類型。因?yàn)榛惖臉?gòu)造函數(shù)有可能返回nil,所以這里需要判斷是否為空,這是蘋果公司推薦寫法,不過(guò)很多代碼沒(méi)有做這一步檢查
-(instancetype)init
{
self=[super init]
if (self){
//初始化操作
}
return self;
}
3.你也可以創(chuàng)建帶有參數(shù)的構(gòu)造函數(shù),和Java不同,當(dāng)你創(chuàng)建一個(gè)構(gòu)造函數(shù)的時(shí)候,默認(rèn)的構(gòu)造函數(shù)依然存在
-(instancetype)initWithName:(NSString *)name
{
self=[super init];
if (self){
//初始化操作
self.name=name;
}
return self;
}
4.子類自定義了一個(gè)構(gòu)造函數(shù),但是使用的時(shí)候有可能不小心調(diào)用到基類的構(gòu)造函數(shù),這樣會(huì)導(dǎo)致子類的部分成員變量沒(méi)有被初始化,為了防止這種情況,需要重寫基類的構(gòu)造函數(shù)