Objective-C 碎碎念 4

本文為大地瓜原創,歡迎知識共享,轉載請注明出處。
雖然你不注明出處我也沒什么精力和你計較。
作者微信號: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];//看出來問題了嗎?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容