【问题标题】: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 个电话。

【问题讨论】:

    标签: ios objective-c thread-safety uikit


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多