OC中类的初始化
所谓指定初始化方法一般是参数最多、最齐全的那个init方法,通过它可以指定该类所有的实例变量(成员变量)的值。
而其它初始化方法会调用指定初始化方法,某些参数可能会使用默认值。
如:
@interface ClassA : NSObject - (instancetype)initWithInt:(int)val NS_DESIGNATED_INITIALIZER; // 指定初始化方法 @property int data; @end @implementation ClassA - (instancetype)initWithInt:(int)val{ self = [super init]; if (self) { self.data = val; } return self; } - (instancetype)init { return [self initWithInt:0]; } @end
利用 NS_DESIGNATED_INITIALIZER 来告诉编译器当前方法是指定初始化方法,并在实现中遵守OC初始化的一般方式(先调用父类的指定初始化方法-->判断得到的self是否合法-->初始化子类的数据)
如果没有调用父类的指定初始化方法,编译器会报警。
进击的小🐴农