atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。
? ?? ???atomic
? ?? ?? ?? ?? ? 设置成员变量的@property属性时,默认为atomic,提供多线程安全。
? ?? ?? ?? ?? ? 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:
? ?? ?? ?? ?? ?? ?? ?? ?{lock}
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???if (property != newValue) {
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? [property release];
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? property = [newValue retain];
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???}
? ?? ?? ?? ?? ?? ?? ?? ?{unlock}
? ?? ???nonatomic
? ?? ???禁止多线程,变量保护,提高性能。
? ?? ???atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。[……]