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

Ios 具有自定义setter但具有默认getter的属性,ios,objective-c,Ios,Objective C,最佳做法是什么 将属性声明为非原子 也创建自定义getter 另一种我不知道的可能性 在大多数情况下,您只需要为setter提供实现并将属性声明为nonatamoic。这将生成带有下划线前缀的ivar,您需要在setter方法中设置值 通常不需要重写getter,除非getter中有特殊的逻辑或属性需要是原子的 如果您确实想提供getter(以及setter),您可能需要一个后端ivar,方法是在@implementation{/*here*/}中声明它,或者使用@synthesis生成一个

最佳做法是什么

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

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

通常不需要重写getter,除非getter中有特殊的逻辑或属性需要是原子的

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

对于原子属性:

@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

“在大多数情况下,您只需要为setter提供实现并将属性声明为nonatamoic。”这正是我现在使用的。所以我会继续使用这个。谢谢你的回答。