本文為大地瓜原創,歡迎知識共享,轉載請注明出處。
雖然你不注明出處我也沒什么精力和你計較。
作者微信號:christgreenlaw
OC中的構造方法,要以init
開頭。構造方法中會初始化成員變量,進行一定程度的初始化配置。必須先初始化父類,再初始化子類。必須判斷父類是否初始化成功,只有父類初始化成功了,才可以繼續初始化子類,最后返回對象的地址。
- (instancetype)init {
self = [super init];
if(self) {
//initialization...
}
return self;
}
instancetype 和 id
id在編譯時不能確定真實類型,而instancetype可以。
id可以用來定義變量,當做返回值類型,當做參數類型;
instancetype只能用作返回值類型。
自定義構造方法,請使用instancetype。
自定義構造方法一定以init開頭,后面的With一定開頭大寫。
自定義類工廠方法是蘋果的一個規范,一般情況下都是以類名小寫開頭,With在其后。
Person *p = [Person personWithAge:30];
自定義構造方法、類工廠方法,都要用self來指代本類創建,而不要用類名。(若用類名,則繼承的子類還會使用父類來創建,因為你寫死了類名)
比如Person類下繼承了Student類。
Person
+ (instancetype) person {
//return [[Person alloc]init];
return [[self alloc]init];
}
+ (instancetype) personWithAge: (int)age {
//Person *p = [[Person alloc]init];
Person *p = [[self alloc]init];
p.age = age;
return p;
}
Student *s = [Student personWithAge:10];//看出來問題了嗎?