返回静态变量时的线程安全性

时间:2015-01-12 23:08:25

标签: ios objective-c thread-safety uikit

我正在实施本质上是"主题"对于iOS应用程序。该主题在编译时已知,并且永远不会需要在运行时更改/重新加载。

我创建了一个Theme课程,他的工作是为当前主题提供适当的UIColor对象。该课程的相关部分如下:

Theme.h:

 +(UIColor*)primaryColor;

Theme.m

static UIColor *primaryColor;

//only ever called once, during +[Theme initialize]
+(void)configureColors{ 
    primaryColor = [UIColor blueColor];
}

+(UIColor*)primaryColor{
    return primaryColor;
}

请注意,+configureColors的最终实现将包含if测试,以根据所需主题设置不同的颜色

在这种情况下我是否需要担心线程安全?有没有更好的方法呢? 我担心可以同时向+primaryColor拨打2个电话。

1 个答案:

答案 0 :(得分:1)

你可以对primaryColor进行一百万次并发调用而没有问题(除了太多线程:))。它是一种只读方法。

唯一可能的问题是primaryColorconfigureColors同时被调用。这不是问题,因为您从标准configureColors方法调用initialize

除此之外,您很可能会从主线程调用primaryColor,因为您可能正在处理UI更新。