2016-03-30 2 views
3

は:カスタムゲッター/セッターを使用する場合、プロパティの「アトミック」属性と「非アトミック」属性は何らかの効果を持ちますか?私はクラスで宣言されたプロパティがある場合

@interface MyClass : NSObject 
@property (atomic) NSString *myString; 
@end 

をそして、私はカスタムのgetterメソッドとsetterメソッドを実装します。

@implementation MyClass 

- (NSString *)myString 
{ 
    // return something 
} 

- (void)setMyString 
{ 
    // do something 
} 

@end 

プロパティ宣言の「アトミック」属性は、実際には何をするのでしょうか?または、自動ゲッタ/セッタが実際にコンパイラによって作成された場合にのみ使用されますか?

"アトミック"と "非アトミック"キーワードは、カスタムゲッターとセッターのプロパティで何もしないと仮定すると、それらのプロパティにどのような属性を使用すべきかについては何らかの規則がありますか?

+0

アトミック性を実装しないのであれば、 "コンベンション"は、クライアントが扱っていることをクライアントが知るように、プロパティを「非原子的」にすることです。 –

+0

"atomic"は、独自のゲッターまたはセッターを使用するときに警告を出すことに影響しますが、両方を使用することはできません。 – gnasher729

答えて

3

プロパティ宣言のatomic属性は実際に何かしますか?または、自動ゲッタ/セッタが実際にコンパイラによって作成された場合にのみ使用されますか?

atomicは、ゲッター/セッターがコンパイラによって合成される場合にのみ使用されます。またused to check the consistency of accessors for readwrite properties次のとおりです。

原子アクセサメソッドの内部実装と同期はプライベートなので、それはあなた自身を実装するアクセサメソッドで合成アクセサを結合することはできません。アトミックのreadwriteプロパティにカスタムセッターを提供し、ゲッターを合成するためにコンパイラーを残すなどの場合は、コンパイラーの警告が表示されます。


私たちはこれらのプロパティのために使用すべきかの属性のいずれかの規則はありますか?

Appleが何らかの規則に従うする必要はありませんが、あなたがあなた自身のコードを文書化するatomicnonatomic属性を使用することができます。これにより、コードの読者は、実装を調べずにアクセサの動作を知ることができます。

関連する問題