+(void)初始化是否进行任何线程锁定?

时间:2010-02-19 17:08:05

标签: objective-c objective-c-runtime

查看“initialize”的定义:

+ (void)initialize

讨论

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

声明初始化是以“线程安全的方式”发送的。在幕后,运行时是否创建了一个锁来使该调用线程安全,或者它是否仅仅是从运行时的工作方式来看它本身就是线程安全的?如果它确实锁定了,这是否意味着如果你实现+初始化运行时会创建一个它本来不会创建的锁?

1 个答案:

答案 0 :(得分:2)

我无法回答它是否锁定,但无论你是否实现+initialize,它仍然被调用。默认实现可能会执行某些操作,但仍会调用它。因此,如果运行时确实锁定,则无论方法是否由子类实现,都会创建锁。