編集: この質問は、(クラス プロパティだけでなく) 通常の宣言されたプロパティにも適用されます。
元の投稿:
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 メソッドに対しても意味がありますか?