このコードで「非アトミック」とはどういう意味ですか?
@property(nonatomic, retain) UITextField *theUsersName;
原子と非原子の違いは何ですか?
ありがとう
このコードで「非アトミック」とはどういう意味ですか?
@property(nonatomic, retain) UITextField *theUsersName;
原子と非原子の違いは何ですか?
ありがとう
回答:
見てみましょうAppleのドキュメントを。
基本的に、と言ってnonatomic
、を使用してアクセサを生成した@synthesize
場合、複数のスレッドが一度にプロパティを変更または読み取ろうとすると、問題が発生する可能性があります。部分的に書き込まれた値または過剰に解放されたオブジェクトまたは保持されたオブジェクトを取得できますが、これらは簡単にクラッシュを引き起こす可能性があります。(ただし、これは潜在的にアトミックアクセサーよりもはるかに高速です。)
デフォルトを使用する場合(つまり、これにはatomic
キーワードがありませんでしたが、現在はあります)、@synthesize
dメソッドはオブジェクトレベルのロックを使用して、単一のプロパティに対する複数の読み取り/書き込みが確実にシリアル化されるようにします。Appleのドキュメントが指摘しているように、これはオブジェクト全体がスレッドセーフであるという意味ではありませんが、個々のプロパティの読み取り/書き込みはそうです。
もちろん、を使用するの@synthesize
ではなく独自のアクセサーを実装する場合、これらの宣言は、プロパティがスレッドセーフな方法で実装されるかどうかについての意図を表す以外に何もしないと思います。
atomic
を作成すると、個々のプロパティにアクセスする際のクラッシュが回避されますが、オブジェクト全体(つまり、姓と名などの個別のプロパティにアクセスすること)が確実に行われるわけではありません正しいこと。
非常に多くの記事とStackOverflowの投稿を読み、変数プロパティの属性を確認するデモアプリを作成した後、すべての属性情報をまとめることにしました
以下は、上記のすべての属性を見つけることができる詳細な記事のリンクです。ここで最高の答えをくれたすべての人々に感謝します!!
例:
@property (retain) NSString *name;
@synthesize name;
例:
@property (nonatomic, retain) NSString *name;
@synthesize name;
スレッドセーフ性についてすでに述べたことに加えて、非アトミックプロパティはアトミックアクセサーよりも高速です。通常は心配する必要はありませんが、覚えておいてください。このため、コアデータによって生成されたプロパティは部分的に非アトミックです。
通常、アトミックは、プロパティへの書き込み/読み取りが単一の操作として発生することを意味します。 Atomic_operation
あなたは以下の記事を読むことでこのようなもののハンドルを手に入れることができます。
非アトミック-スレッドセーフではない
atomic-スレッドセーフ-これはデフォルトのプロパティ属性です。
「アトミック」プロパティへのアクセスがスレッドセーフであること。一方、意味『非アトミック』はそれとは逆である。あなたはObjective-Cのプロパティでプロパティを宣言すると、その合成されたアクセサは、プロパティへの堅牢なアクセスを提供するように、デフォルトでアトミックですマルチスレッド環境-つまり、ゲッターから返された値またはセッターを介して設定された値は、同時に実行されている他のスレッドに関係なく、常に完全に取得または設定されます。ただし、以下のようにプロパティを非アトミックとして宣言した場合
@property (nonatomic, retain) NSString *myString;
次に、オブジェクトプロパティの合成されたアクセサが値を直接返すことを意味します。非アトミック属性の影響は、環境によって異なります。デフォルトでは、合成されたアクセサはアトミックです。したがって、非原子は原子よりもかなり高速です。