代码之家  ›  专栏  ›  技术社区  ›  Kendall Helmstetter Gelner

+初始化是否执行任何线程锁定?

  •  1
  • Kendall Helmstetter Gelner  · 技术社区  · 15 年前

    查看“初始化”的定义:

    + (void)initialize
    

    讨论

    运行时在类或从类继承的任何类从程序中发送其第一条消息之前,向程序中的每个类只发送一次初始化。(因此,如果不使用类,则永远不会调用该方法。)运行时以线程安全的方式将初始化消息发送到类。超类在其子类之前接收此消息。

    声明初始化是以“线程安全方式”发送的。在封面下,运行时是创建一个锁来使调用线程安全,还是仅仅从运行时的工作方式来看,它本身就是线程安全的?如果它是锁的,这是否意味着如果您实现+初始化运行时,它会创建一个本来不会创建的锁?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Jasarien    15 年前

    我无法回答它是否锁定,但不管您是否实现 +initialize ,它仍然被称为。默认实现可以做一些事情,但它仍然被调用。因此,如果运行时确实进行了锁定,那么无论该方法是否由子类实现,都会创建该锁。