如果类属性是原子的,为什么我不能在 iOS 中自定义实现的 getter 和 setter?
@property (atomic, strong) NSArray* myArray;
最佳答案
实际上,您可以为原子属性实现您自己的自定义 getter 和 setter。但是,编译器不允许您执行的是仅实现这两个访问器方法之一的自定义呈现,而不是另一个,从而期望编译器为您合成它。这是有道理的:原子属性的整个想法是,人们无法在更新属性的同时访问该属性。因此,编译器无法在不合成另一种原子访问器方法的情况下合成其中一种原子访问器方法,因为它无法将其访问器方法的原子性质与您的访问器方法相协调。
不用说,如果您确实为原子
属性实现了自己的一对访问器方法,请认识到您有责任确保原子行为的实现。
不过,我必须承认,当我看到将 atomic
与 NSArray
之类的东西结合起来进行讨论时,我感到很担心。我只是想确保您没有在使用 atomic
关键字可以确保线程安全的假设下进行操作。作为一般规则,在处理像数组这样的对象时,您需要将与相关对象的所有交互包装在某种同步机制中以实现线程安全,而不仅仅是 NSArray 的检索指针。因此,这种同步机制通常比基本访问器方法实现更高的级别。
关于objective-c - 如果类属性是原子的,为什么我不能自定义 getter 和 setter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26930405/