EDIT:この質問は、(クラスのプロパティだけでなく)通常の宣言されたプロパティにも当てはまります!`readonly`宣言されたプロパティ(クラスプロパティを含む)で`非原子的 'が意味を持ちますか?
オリジナルポスト:次のようになります
@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
スウィフト3.0で、このメソッドへのアクセス:
は、私は現在、getterメソッドとして実装されているパブリッククラスのメソッドsharedInstance
を考えてみましょうMyClass.shared().doSomething()
swifty私たちはクラスメソッドをクラスプロパティに変更する必要がありますXcodeの8.実際に、私は唯一のWWDC 2016のビデオでは、アップルのドキュでそれを見つけることができません)スウィフトコードで今すぐ
@interface MyClass
@property (class, nonatomic, readonly) MyClass *sharedInstance;
- (void)doSomething;
@end
// implementation stays the same
:nonatomic/atomic
プロパティ修飾子(知らないMyClass.shared.doSomething()
そう厳密な用語)は、私がobjcで自分自身を実装するgetterメソッドにとっても意味がありますか?
アトミックと非アトミックは、コンパイラがプロパティへの同時アクセスを処理するコードを生成する方法と関係します。アトミックプロパティを使用する場合、コンパイラは読み込み/書き込みの衝突を回避するために、ロックを使用してプロパティへの読み書きアクセスを囲みます。プロパティが変更された場合(クラス内からバッキングインスタンス変数を使用することを含む)、クラスのインスタンスに他のスレッドからアクセスできる場合は、おそらくアトミックにしておく必要があります。 –
シングルトンのObjective-CクラスメソッドをObjective-Cプロパティに変換する方法がわかりません。質問の2番目の部分に投稿したコードは通常のインスタンスプロパティなので、シングルトンにアクセスすることはできません。 –
@duncanc: '@property(class)'は、インスタンスプロパティではなくクラスプロパティにします。これはObjCアクセスには影響しませんが、Swift構文が変更されます。 – rickster