如果我在一个类中声明了一个属性:
@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的属性没有任何作用,那么我们应该为这些属性使用什么属性?
答案 0 :(得分:3)
属性声明中的
atomic
属性是否实际执行了任何操作?或者仅在编译器实际创建自动getter / setter时使用它?
atomic
仅在编译器合成getter / setter时使用。它也是used to check the consistency of accessors for readwrite
properties:
由于原子访问器方法的内部实现和同步是私有的,因此无法将合成访问器与您自己实现的访问器方法相结合。例如,如果您尝试为原子,readwrite属性提供自定义setter,但让编译器合成getter,则会收到编译器警告。
我们应该为这些属性使用什么属性?
Apple不要求您遵循任何约定,但您可以使用atomic
和nonatomic
属性来记录您自己的代码。这样,您的代码读者就可以了解访问者的行为,而无需查看其实现。