[英]+(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.