如果class属性是原子的,为什么我不能在iOS中自定义我的实现的getter和setter?
@property (atomic, strong) NSArray* myArray;
答案 0 :(得分:4)
实际上,您可以为原子属性实现自己的自定义getter和setter。但是,编译器不允许您执行的操作是仅实现自定义再现中的一种,而不是另一种,从而期望编译器为您合成它。这是有道理的:原子属性的整个概念是在更新属性的同时无法访问属性。因此,编译器无法合成其中一个原子访问器方法而不合成另一个,因为它无法协调其访问器方法的原子性质。
毋庸置疑,如果您为atomic
属性实现了自己的一对访问器方法,请认识到您有责任确保原子行为的实现。
但是,我必须承认,当我看到atomic
与NSArray
之类的内容相关时,我会担心。我只是想确保您不使用atomic
关键字确保线程安全的假设。作为一般规则,当处理像数组这样的对象时,您需要在某些同步机制中包含与所讨论对象的所有交互,以实现线程安全,而不仅仅是检索NSArray
指针。因此,这种同步机制通常实现的级别高于基本访问器方法。