此代码中的“非原子”是什么意思?
@property(nonatomic, retain) UITextField *theUsersName;
原子和非原子有什么区别?
谢谢
此代码中的“非原子”是什么意思?
@property(nonatomic, retain) UITextField *theUsersName;
原子和非原子有什么区别?
谢谢
Answers:
看一下Apple Docs。
基本上,如果您说nonatomic
,并且您使用生成了访问器@synthesize
,那么如果多个线程尝试一次更改/读取该属性,则可能发生错误。您可以获得部分写入的值或过度释放/保留的对象,这很容易导致崩溃。(不过,这可能比原子访问器快很多。)
如果您使用默认值(即atomic
;以前没有关键字,但是现在有),则@synthesize
d方法使用对象级锁来确保对单个属性的多个读/写被序列化。正如Apple文档所指出的,这并不意味着整个对象都是线程安全的,但是单个属性的读写是。
当然,如果您实现自己的访问器而不是使用@synthesize
,我认为这些声明除了表示您是否打算以线程安全的方式实现该属性外,什么都不做。
atomic
可以避免在访问单个属性时发生崩溃,但不能确保整个对象(即访问诸如名字和姓氏之类的单独属性)将要执行的操作正确的事情。
阅读了如此多的Articles和StackOverflow帖子,并制作了演示应用程序来检查Variable属性属性之后,我决定将所有属性信息放在一起
因此,下面是详细的文章链接,您可以在其中找到上述所有属性,这些绝对会对您有所帮助。非常感谢在这里给出最佳答案的所有人!!
范例:
@property (retain) NSString *name;
@synthesize name;
例:
@property (nonatomic, retain) NSString *name;
@synthesize name;