Objective-C 学习笔记 | init
- Objective-C 学习笔记 | init
- 编写 init 方法
- 禁用 init 方法
Objective-C 学习笔记 | init
init 是实例方法,负责初始化对象,并返回初始化后的对象的地址。
编写 init 方法
完整代码见于:UestcXiye/Objective-C-Practice 的 Appliances。
本程序的继承结构如下图所示:
下面来分析 BNROwnedAppliance *a = [[BNROwnedAppliance alloc] init];
的调用过程:
编写初始化方法的规则:
- 其他的初始化方法都应该(直接或间接地)调用指定初始化方法。
- 指定初始化方法应该先调用父类的指定初始化方法,再对实例变量进行初始化。
- 如果某个类的指定初始化方法和父类的不同(这里指的是方法名不同),就必须覆盖父类的指定初始化方法,并调用新的指定初始化方法。
- 如果某个类有多个初始化方法,就应该在相应的头文件注明哪个方法是指定初始化方法。
禁用 init 方法
有些时候,初始化一个对象时必须带上特定的值,不能使用默认值。因此,我们需要覆盖 init 方法,告诉程序员不能调用这个方法,并提供修改建议:
- (instancetype)init
{
[NSException raise:@"BNROwnedApplianceInitialization" format:@"Use initWithProductName:, not init"];
}