編寫高質量OC程式碼52建議總結:16.提供“全能初始化方法”

viiimaus發表於2017-02-16

如果建立類例項的方式不止一種,會有多種初始化方法,仍要選擇其中一個作為“全能初始化”方法,令其他初始化方法都來呼叫它。

- (instancetype)init NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti NS_DESIGNATED_INITIALIZER;
 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
 - (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
 - (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)secs;
 - (instancetype)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;
- (instancetype)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti NS_DESIGNATED_INITIALIZER;是“全能初始化方法”,其他初始化方法都會呼叫它。只有在全能初始化方法中,才會儲存內部資料。當底層資料儲存機制改變時,只需修改此方法的程式碼就可以。

在類中提供一個全能初始化方法,並於文件中指明。其他初始化方法均應呼叫此方法。
若全能初始化方法與超類不同,則需覆寫超類中的對應方法。
如果超類的初始化方法不適用於子類,應該覆寫這個超類的方法,並在其中丟擲異常。

相關文章