標籤:objective-c init方法 初始化 自訂
初學OC,對init這個方法不是很瞭解。我們現在來分別對init方法進行重寫以及自訂,來加深對他的瞭解。本例子也是用Person類來進行測試。
(一)重寫init方法。
(1)在Person.h中聲明init方法:
-(instancetype)init;
(2)在Person.m中聲明成員變數,以及寫一個列印成員變數的函數,並且重寫init初始化方法:在重寫的方法中,對成員變數進行了賦值。注意,這個init方法是無參數的方法。
{ NSString *_peopleName; int _peopleAge;}-(void)show{ NSLog(@"_peopleName = %@",_peopleName); NSLog(@"_peopleAge = %d",_peopleAge);}//重寫初始化方法;- (instancetype)init{ self = [super init]; if (self) { [email protected]"Bob"; _peopleAge=24; } return self;}
(3)在main.m中調用該重寫的init方法,並進行列印成員變數的值。
People *people = [[People alloc]init]; [people show];
(4)輸出結果如下:
。
(5)結果分析,輸出結果成功列印出我們在init方法定義時候對成員變數的賦值。符合預期。我們成功實現了對init方法的重寫。
(二)自訂init方法。
(1)在重寫的init方法中,我們發現一個問題,我們無法在main.m中實現對init的操作,也無法通過參數傳值的方式實現對成員變數的賦值。最致命的問題是無法在執行個體化一個對象的時候對他擁有的成員變數賦值。所以我們最好自訂init方法。
首先在Person.h中聲明自訂init方法,參數包括peopleName,peopleName.
-(instancetype)initPeople: (NSString *) peopleName andAge: (int)peopleAge;
(2)在Person.m中實現init方法。使用傳入的參數值對成員變數進行賦值:
-(instancetype)initPeople:(NSString *)peopleName andAge:(int)peopleAge{ self = [super init]; if (self) { _peopleName = peopleName; _peopleAge = peopleAge; } return self;}
(3)在main.m中執行個體化對象,在執行個體化對象的同時進行成員變數的賦值,然後列印資訊:
People *people2 = [[People alloc]initPeople:@"Jack" andAge:26];
[people2 show];
(4)輸出結果:
。
(5)結果分析,我們成功在執行個體化對象的時候並對其賦值,這個就是初始化方法的作用。比最初的重寫init方法更為靈活。這就和C++中的構造方法起到類似的作用。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Objective-C學習筆記(二十二)——初始化方法init的重寫與自訂