最佳做法是什么?
为什么更喜欢这个解决方案而不是另一个。
答案 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