gpt4 book ai didi

objective-c - 所有属性都应该声明为 "nonatomic"吗?

转载 作者:技术小花猫 更新时间:2023-10-29 11:15:23 28 4
gpt4 key购买 nike

我想知道:iPhone 开发中的所有属性都应该是 nonatomic 吗?如果是,为什么?

最佳答案

来自 The Objective-C Programming Language,强制性指南:


原子性

您可以使用此属性指定访问器方法不是原子的。 (没有关键字表示原子。)

非原子
指定访问器是非原子的。 默认情况下,访问器是原子的。

属性在默认情况下是原子的,因此合成访问器在多线程环境中提供对属性的健壮访问——也就是说,从 getter 返回的值或通过 setter 设置的值总是被完全检索或设置,而不管其他线程正在同时执行什么.有关详细信息,请参阅 “Performance and Threading.”

如果您指定retaincopy 并且不指定nonatomic,那么在引用计数环境中,一个合成的get 访问器对象属性使用锁并保留和自动释放返回值——实现将类似于以下内容:

[_internal lock]; // lock using an object-level lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;

如果您指定 nonatomic,对象属性的合成访问器将直接返回值。

关于objective-c - 所有属性都应该声明为 "nonatomic"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115792/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com