Ios-细节二:理解`NS_DESIGNATED_INITIAL

2017-02-23  本文已影响319人  随偑侕荇

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


参考博客:
正确使用NS_DESIGNATED_INITIALIZER

上一篇 下一篇

猜你喜欢

热点阅读