具有自定义setter但默认getter的属性

时间:2014-07-07 22:03:20

标签: ios objective-c

最佳做法是什么?

  • 将该属性声明为非原子
  • 创建自定义getter
  • 我不知道
  • 的另一种可能性

为什么更喜欢这个解决方案而不是另一个。

1 个答案:

答案 0 :(得分:1)

在大多数情况下,您只需要为setter提供实现并将该属性声明为非atatic。这将生成带有下划线前缀的ivar,您需要在setter方法中设置该值。

除非你在getter中有特殊逻辑或者属性需要是原子的,否则你通常不需要覆盖getter。

如果您确实想要提供getter(以及setter),您可能需要在@implementation{ /*here*/ }中声明它或使用@synthesize生成一个后端ivar。

如果是原子属性:

@interface MyClass : NSObject
@property (atomic) id object; // atomic is default attribute 
@end
@implementation MyClass
@synthesize object = _object; // to create ivar
- (id)object {
@synchronized(self) { // or use lock / atomic compare-and-swap
    return _object;
}
}
- (void)setObject:(id)obj {
@synchronized(self) {  // or use lock / atomic compare-and-swap
    _object = obj;
}
}

@end