如果使用自定义getter / setter,属性上的“atomic”和“nonatomic”属性是否会产生任何影响?

时间:2016-03-30 13:19:58

标签: objective-c

如果我在一个类中声明了一个属性:

@interface MyClass : NSObject
@property (atomic) NSString *myString;
@end

我实现了自定义getter和setter方法:

@implementation MyClass

- (NSString *)myString
{
    // return something
}

- (void)setMyString
{
    // do something
}

@end

属性声明中的“atomic”属性是否实际执行了任何操作?或者仅在编译器实际创建自动getter / setter时使用它?

假设“atomic”和“nonatomic”关键字对自定义getter和setter的属性没有任何作用,那么我们应该为这些属性使用什么属性?

1 个答案:

答案 0 :(得分:3)

  

属性声明中的atomic属性是否实际执行了任何操作?或者仅在编译器实际创建自动getter / setter时使用它?

atomic仅在编译器合成getter / setter时使用。它也是used to check the consistency of accessors for readwrite properties

  

由于原子访问器方法的内部实现和同步是私有的,因此无法将合成访问器与您自己实现的访问器方法相结合。例如,如果您尝试为原子,readwrite属性提供自定义setter,但让编译器合成getter,则会收到编译器警告。


  

我们应该为这些属性使用什么属性?

Apple不要求您遵循任何约定,但您可以使用atomicnonatomic属性来记录您自己的代码。这样,您的代码读者就可以了解访问者的行为,而无需查看其实现。