编辑:这个问题也适用于普通声明的属性(不仅适用于类属性)!
原帖:
假设我有sharedInstance
当前作为 getter 方法实现的公共类方法:
@interface MyClass
+ (instancetype)sharedInstance;
- (void)doSomething;
@end
@implementation MyClass
+ (instancetype)sharedInstance {
static MyClass *shared = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shared = [[MyClass alloc] init];
});
return shared;
}
@end
在 Swift 3.0 中访问这个方法看起来像这样:MyClass.shared().doSomething()
所以为了让它更快捷,我们应该将类方法更改为类属性(Xcode 8 中的新功能。但实际上我在 Apple Docu 中找不到它,仅在 WWDC 2016 视频中)
@interface MyClass
@property (class, nonatomic, readonly) MyClass *sharedInstance;
- (void)doSomething;
@end
// implementation stays the same
现在在 Swift 代码中:MyClass.shared.doSomething()
那么nonatomic/atomic
属性修饰符(不知道确切的术语)对于我自己在 objc 中实现的 getter 方法是否有意义?