Objective-C中编程中一些推荐的书写规范小结

2020-01-14 22:32:41刘景俊

也就是说,你可能看到一个类有多个初始化方法,实际上是一个指定初始化方法(或多个,比如UITableViewController就有好几个)+多个间接初始化方法。这些简洁初始化方法可能会根据不同的参数做不同的操作,但是本质上都是调用指定初始化方法。所以说,间接初始化方法是有可能没有调用到的,但是指定初始化方法是会调用到的(并不是每一个都会调用到,但是最后调用的一定是一个指定初始化方法)。(这里又可以引申到上面提到的问题,我们可以直接重写父类的指定初始化方法,也可以自定义初始化方法(在这个方法中需要用到self = [super 父类初始化方法]这种形式的代码),并且如果是自定义初始化方法,还应该重写从父类继承的初始化方法来返回我们的自定义初始化方法…)。

总之就是,如果重写父类的指定初始化方法首先需要调用父类的相应初始化方法;如果增加自定义指定初始化方法,首先在新增的自定义指定初始化方法中调用父类的相应初始化方法,然后需要重写父类的指定初始化方法,在重写的方法中调用刚刚添加的自定义指定初始化方法。

4.补充

一个类可能有多个指定初始化方法,也有可能只有一个指定初始化方法。

以UITableViewController为例,我们可以看到:

复制代码
- (instancetype)initWithStyle:(UITableViewStyle)style NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_DESIGNATED_INITIALIZER;
它有三个指定初始化方法,我们刚才说,当子类从父类继承并重写初始化方法,首先需要调用父类的初始化方法,但是如果一个类的初始化方法有多个,那么需要调用哪个呢?

 

事实上不同的创建方式要调用不同的指定初始化方法。