NS_DESIGNATED_INITIALIZER
(指定初始化器)。
在OC中,对于多个方法实现初始化的时候,会指定其中一个做为NS_DESIGNATED_INITIALIZER
,其于的初始化方法(简称Secondary initializers(次要初始化器))会调用指定初始化器来实现对象的创建。
比如:OC中
UIView
在AFNetworking中父类
AFURLSessionManager.h
和 子类AFHTTPSessionManager.h
中
注:一般的时候创建类的会选择创建一个接口实现对象的创建。但有时会创建多个初始化器,这时候可以
使用指定初始化器实现。在类中创建一个单列,又有多个初始化器,可以采用此方法。(个人看法)
类在创建的时候遵循的原则:
正确编写Designated Initializer的几个原则
- 每个类的正确初始化过程应当是按照从子类到父类的顺序,依次调用每个类的Designated Initializer。并且用父类的Designated Initializer初始化一个子类对象,也需要遵从这个过程。
- 如果子类指定了新的初始化器,那么在这个初始化器内部必须调用父类的Designated Initializer。并且需要重写父类的Designated Initializer,将其指向子类新的初始化器
废话不多说,上代码:
gitHub上相关代码:https://github.com/suifengerxing/Ios-Encapsulation-of-knowledge
父类:Person.h
Person.m
子类:Student.h
Student.m
运行结果:
main