在哪个iOS版本中添加了原子/非原子?

时间:2015-03-10 07:55:31

标签: ios atomic

在哪个iOS版本中添加了原子/非原子? iOS 2.0,4.0等

2 个答案:

答案 0 :(得分:2)

它不是iOS SDK版本功能。它是Objective-C编译器(默认情况下为LLVM)语言功能。

@property (nonatomic) NSString* prop;

被转换为由iOS执行的机器代码。有一天有人教了编译器(在XCode中):如果你看到nonatomic关键字produc机器代码等于这个操作:

- (void) setProp:(NSString *)prop_ {
    [prop retain];
    [prop release];
    prop = userName_;
}

如果您看到atomic关键字,请确保访问已同步:

 - (void) setProp:(NSString*)prop_ {
     @synchronized(self) {
       [prop release];
       prop = [prop_ retain];
     } }

编译完成后,每个iOS版本都会理解它。

答案 1 :(得分:2)

最后两个是相同的; “atomic”是默认行为(请注意,它实际上不是关键字;仅通过缺少非原子来指定它)。 假设你是@synthesizing方法实现,原子与非原子会改变生成的代码。如果您正在编写自己的setter / getter,则atomic / nonatomic / retain / assign / copy仅仅是建议性的。 使用“atomic”,合成的setter / getter将确保始终从getter返回整个值或由setter设置,而不管任何其他线程上的setter活动。也就是说,如果线程A位于getter的中间,而线程B调用setter,则实际可行的值 - 一个自动释放的对象,很可能 - 将返回给A中的调用者。 在非原子,没有这样的保证。因此,非原子比“原子”快得多。