财产申报中的含义atomic和nonatomic含义是什么? @property(nonatomic, retain) UITextField *userName; @property(atomic, retain) UITextField *userName; @property(retain) UITextField *userName; 这三者之间的运作区别是什么? 最后两个是相同的; “atomic”是默认行为(注意它实际上不是一个关键字;它仅在没有的情况下指定nonatomic – atomic在最近版本的llvm / clang中被添加为关键字)。 假设你是@synthesizing方法实现,原子与非原子会改变生成的代码。如果您正在编写自己的setter / getter,则atomic / nonatomic / retain / assign / copy仅仅是建议性的。(注意:@synthesize现在是LLVM的最新版本中的默认行为。也没有必要声明实例变量;它们也将自动合成,并且将_在其名称前加上以防止意外直接访问)。 对于“原子”,合成的setter / getter将确保始终从getter返回整个值或由setter设置,而不管任何其他线程上的setter活动。也就是说,如果线程A位于getter的中间,而线程B调用setter,则实际可行的值 – 一个自动释放的对象,很可能 – 将返回给A中的调用者。 在nonatomic,没有这样的保证。因此,nonatomic比“原子”快得多。 什么“原子”并没有做的就是关于线程安全的任何保证。如果线程A与线程B同时调用getter并且C调用具有不同值的setter,则线程A可以获得返回的三个值中的任何一个 – 在调用任何setter之前的值或者传递给setter的任一值在B和C中。同样,对象可能最终得到B或C的值,无法分辨。 确保数据完整性 – 多线程编程的主要挑战之一 – 是通过其他方式实现的。 添加到此: atomicity 当多个依赖属性在起作用时,单个属性也不能保证线程安全。 考虑: @property(atomic, copy) NSString *firstName; @property(atomic, copy) NSString *lastName; @property(readonly,