如果创建类实例的方式不止一种,会有多种初始化方法,仍要选择其中一个作为“全能初始化”方法,令其他初始化方法都来调用它。
- (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;是“全能初始化方法”,其他初始化方法都会调用它。只有在全能初始化方法中,才会储存内部数据。当底层数据存储机制改变时,只需修改此方法的代码就可以。
在类中提供一个全能初始化方法,并于文档中指明。其他初始化方法均应调用此方法。
若全能初始化方法与超类不同,则需覆写超类中的对应方法。
如果超类的初始化方法不适用于子类,应该覆写这个超类的方法,并在其中抛出异常。