objective-c - 如果类属性是原子的,为什么我不能自定义 getter 和 setter?

标签 objective-c properties

如果类属性是原子的,为什么我不能在 iOS 中自定义实现的 getter 和 setter?

@property (atomic, strong) NSArray* myArray;

最佳答案

实际上,您可以为原子属性实现您自己的自定义 getter 和 setter。但是,编译器不允许您执行的是仅实现这两个访问器方法之一的自定义呈现,而不是另一个,从而期望编译器为您合成它。这是有道理的:原子属性的整个想法是,人们无法在更新属性的同时访问该属性。因此,编译器无法在不合成另一种原子访问器方法的情况下合成其中一种原子访问器方法,因为它无法将其访问器方法的原子性质与您的访问器方法相协调。

不用说,如果您确实为原子属性实现了自己的一对访问器方法,请认识到您有责任确保原子行为的实现。


不过,我必须承认,当我看到将 atomicNSArray 之类的东西结合起来进行讨论时,我感到很担心。我只是想确保您没有在使用 atomic 关键字可以确保线程安全的假设下进行操作。作为一般规则,在处理像数组这样的对象时,您需要将与相关对象的所有交互包装在某种同步机制中以实现线程安全,而不仅仅是 NSArray 的检索指针。因此,这种同步机制通常比基本访问器方法实现更高的级别。

关于objective-c - 如果类属性是原子的,为什么我不能自定义 getter 和 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26930405/

相关文章:

c# - 在 C# 中将属性作为 'out' 参数传递

java - 如何为整个项目配置单个属性占位符

ios - imageView 一直被 navigationItem 遮挡

ios - swift中赋值时如何避免set方法?

ios - 在当前线程上执行 Parse.com 用户注册 (signUp :) and retrieving the NSError

excel - VBA中的名称和全名有什么区别?

properties - 使用内部 setter 进行属性注入(inject)

objective-c - 通用首选项 Pane 被迫在 32 位上启动

ios - 生成 UIButton

公共(public)变量和属性之间的VBA区别