【问题标题】:Why can't I customize the getter and setter if class property is atomic?如果类属性是原子的,为什么我不能自定义 getter 和 setter?
【发布时间】:2015-01-11 20:51:13
【问题描述】:

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

@property (atomic, strong) NSArray* myArray;

【问题讨论】:

标签: objective-c properties


【解决方案1】:

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

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


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

【讨论】:

  • 仅供参考 - 我要求澄清的原因(在问题下方的第一条评论中)是为了确认问题是否应该作为副本关闭(乔什链接的那个)。如果您的答案的前半部分确实适用,则该问题是重复的,应该关闭。
  • 恕我直言,这个问题更多的是“为什么”,而另一个问题是“我该怎么做”,但可以看出为什么你可能倾向于将其描述为一个骗子,但有待桑迪的澄清。就个人而言,我认为这里的正确答案很可能不是“实现两种访问器方法”(正如其他答案所建议的那样),而是“原子可能不是正确的同步机制”或“也许自定义访问器不是正确的图案。”我们拭目以待。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多