当前位置:  开发笔记 > IOS > 正文

"Nonatomic"属性是什么意思?

如何解决《"Nonatomic"属性是什么意思?》经验,为你挑选了6个好方法。

"非原子"在此代码中的含义是什么?

@property(nonatomic, retain) UITextField *theUsersName;

原子和非原子有什么区别?

谢谢



1> Jesse Rusak..:

看一下Apple Docs.

基本上,如果您说nonatomic,并且您使用生成访问器@synthesize,那么如果多个线程尝试一次更改/读取属性,则可能发生错误.您可以获得部分写入的值或过度释放/保留的对象,这很容易导致崩溃.(但这可能比原子访问器快得多.)

如果你使用默认值(这是atomic;以前没有关键字,但现在有),那么@synthesized方法使用对象级锁定来确保序列化对单个属性的多个读/写.正如Apple文档指出的那样,这并不意味着整个对象是线程安全的,而是单个属性的读/写.

当然,如果您实现自己的访问器而不是使用@synthesize,我认为这些声明除了表达您是否以线程安全方式实现该属性的意图外什么都不做.


我喜欢这个答案 - 比其他地方的人更容易混淆,更简单,更完整!
@Wish非原子访问器可以更快,因为为了防止其他线程同时读/写,你需要持有一个互斥锁或做一些其他低成本技巧,这会花费CPU时间.如果你正在使用锁,你也可能最终阻塞其他线程,这也需要时间.

2> swiftBoy..:

阅读了如此多的文章和StackOverflow帖子,并制作了演示应用程序以检查Variable属性属性后,我决定将所有属性信息放在一起

    原子//默认

    非原子

    strong =保留//默认

    weak = unsafe_unretained

    保留

    分配//默认

    unsafe_unretained

    复制

    只读

    readwrite //默认

以下是详细的文章链接,您可以在其中找到上述所有属性,这肯定会对您有所帮助.非常感谢所有在这里给出最佳答案的人!

iOS中的变量属性属性或修饰符

    原子

    原子意味着只有一个线程访问变量(静态类型).

    Atomic是线程安全的.

    但它的表现很慢.

    Atomic是默认行为.

    非垃圾收集环境中的原子访问器(即使用retain/release/autorelease时)将使用锁来确保另一个线程不会干扰正确设置/获取值.

    它实际上不是关键字.

示例:

@property (retain) NSString *name;

@synthesize name;

    非原子

    Nonatomic意味着多线程访问变量(动态类型).

    Nonatomic是线程不安全的.

    但它的性能很快.

    Nonatomic不是默认行为; 我们需要在属性属性中添加非原子关键字.

    当两个不同的进程(线程)同时访问同一个变量时,它可能会导致意外行为.

例:

@property (nonatomic, retain) NSString *name;

@synthesize name;



3> Marc Charbon..:

除了已经对线程安全性所说的内容之外,非原子属性比原子访问器更快.这通常不需要担心,但请记住.出于这个原因,核心数据生成的属性部分是非原子的.



4> joshdick..:

在多线程程序中,原子操作不能部分地通过,而非原子操作可以.

因此,如果您的关键操作是非原子的,并且您不希望中断,则应使用互斥锁(或类似的东西).



5> Paul Tomblin..:

如果指定"atomic",则生成的访问函数会有一些额外的代码来防止同时更新.



6> Jake..:

通常原子意味着对属性的写入/读取作为单个操作发生. Atomic_operation

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有