gpt4 book ai didi

ios - +(void) 初始化线程安全

转载 作者:行者123 更新时间:2023-11-28 21:48:35 25 4
gpt4 key购买 nike

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

+(void)initialize{

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

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

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

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

最佳答案

是的,如果在第一个线程在其中时从第二个线程调用初始化,那么运行时将在第一个线程完成时阻塞第二个线程。

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

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

关于ios - +(void) 初始化线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29148855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com