Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`

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


Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`_第1张图片

Person.m


Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`_第2张图片

子类:Student.h
Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`_第3张图片

Student.m

Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`_第4张图片
Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`_第5张图片
Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`_第6张图片

运行结果:
main


Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`_第7张图片

参考博客:
正确使用NS_DESIGNATED_INITIALIZER

你可能感兴趣的:(Ios-细节二:理解`NS_DESIGNATED_INITIALIZER`)