返回静态变量时的线程安全
Posted
技术标签:
【中文标题】返回静态变量时的线程安全【英文标题】:Thread safety when returning static variables 【发布时间】:2015-01-12 23:08:25 【问题描述】:我正在为 ios 应用程序实现本质上是“主题”的东西。主题在编译时是已知的,并且永远需要在运行时更改/重新加载。
我创建了一个Theme
类,它的工作是为当前主题提供适当的UIColor
对象。类的相关部分如下所示:
主题.h:
+(UIColor*)primaryColor;
主题.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】:您可以对primaryColor
进行一百万次并发调用并且没有问题(除了线程太多:))。这是一个只读方法。
唯一可能的问题是primaryColor
是否与configureColors
同时被调用。这不是问题,因为您是从标准的initialize
方法调用configureColors
。
除此之外,您很可能会从主线程调用 primaryColor
,因为您可能正在处理 UI 更新。
【讨论】:
以上是关于返回静态变量时的线程安全的主要内容,如果未能解决你的问题,请参考以下文章