繁体   English   中英

+(无效)初始化线程安全

[英]+(void)initialize thread safety

在实际调用任何init方法之前,我正在对静态变量进行一些初始化。 这是代码:

+(void)initialize{

    if(sShipsDefaults == nil){
        //initialize static variable called sShipsDefaults
    }
}

我看到的是,在创建类的第一个实例时,初始化仅被懒惰地调用一次,这是所期望的行为。

我检查的是sShipsDefaults的部分为nil是因为即使对每个类都初始化一次initialize,每个子类也调用一次。 因此,如果我有Ship类和EnemyShip类,它们是Ship的子类,则初始化将被调用两次(每个类在创建对象时都会被调用一次)。

现在让我们回到问题...初始化是否做像dispatch_once_t这样的锁(它是线程安全的)吗?

是的,如果第一个线程在第二个线程中调用initialize,则运行时将在第一个线程完成时阻塞第二个线程。

参见: https : //developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html

您还可以将初始化放在检查是否为if (self == [Ship class])这样当任何子类调用了initialize方法时,它将不会多次运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM