在哪个iOS版本中添加了原子/非原子? iOS 2.0,4.0等
答案 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中的调用者。 在非原子,没有这样的保证。因此,非原子比“原子”快得多。