美文网首页
OC initialize 方法学习

OC initialize 方法学习

作者: EngineerPan | 来源:发表于2020-04-01 21:58 被阅读0次
+ (void)initialize;
  • 在接收到第一个消息之前初始化该类;

讨论区

  1. 运行时在将类或从其继承的任何类从程序内部发送其第一条消息之前,将初始化发送到程序中的每个类。超类在其子类之前收到此消息。

  2. 运行时以线程安全的方式将初始化消息发送给类。也就是说,initialize由第一个线程运行以将消息发送给类,而其他任何试图向该类发送消息的线程都将阻塞,直到初始化完成为止。

  3. 如果子类不实现初始化(运行时将调用继承的实现),或者子类显式调用[super initialize],则可以多次调用超类实现。如果要保护自己免于多次运行,可以按照以下方式来构造实现:

+(void)initialize {
  if(self == [ClassName self]){
    // ...进行初始化...
  }
}
  1. 由于初始化是以阻塞的方式进行的,因此将方法的实现限制为尽可能少的必要工作非常重要。具体来说,任何其他类在其initialize方法中可能需要使用锁的代码都容易导致死锁。因此,您不应依赖初始化来进行复杂的初始化,而应将其限制为简单的类本地初始化。

特别注意事项

  • 每个类仅调用一次initialize。如果要对类和类的类别执行独立的初始化,则应实现load方法。

相关文章

  • OC initialize 方法学习

    在接收到第一个消息之前初始化该类; 讨论区 运行时在将类或从其继承的任何类从程序内部发送其第一条消息之前,将初始化...

  • OC中的Category(三)

    OC中的Category(三) OC中+initialize函数加载和调用 OC对象是在查找方法时判断自己有没有初...

  • 技术点

    1、oc中 load 和initialize 方法的异同? 连接 load 方法: 对于每个类(class)及分类...

  • iOS学习回顾

    oc部分 1. load和initialize的区别(利用load方法,MJRefresh在app启动时 在UIT...

  • iOS面试题(三)- 生命周期

    1. 说说你对 OC 中 load 方法和 initialize 方法的异同。——主要说一下执行时间,各自用途,没...

  • iOS精典面试(二)

    说说你对 OC 中 load 方法和 initialize 方法的异同。——主要说一下执行时间,各自用途,没实现子...

  • OC中load方法和initialize方法的异同

    对于OC中的类来说,在runtime中会有两个方法被调用: +load +initialize 这两个方法看起来都...

  • OC基础-category(3)

    initialize方法 initialize方法被调用的时机:initialize方法会在 “类” 在第一次 “...

  • +initialize

    +initialize +initialize 方法的调用时机 +initialize 方法在 Class 第一次...

  • Swift环境中Load与Initialize的实现

    用了近两年的Swift,昨天才知道Swift居然没有像OC的方法Load和Initialize,需要自己实现 昨天...

网友评论

      本文标题:OC initialize 方法学习

      本文链接:https://www.haomeiwen.com/subject/zfezuhtx.html