14

nonatomicオプションは、setter メソッドの実行を高速化すると言われています。私はそれをグーグルで調べましたが、理解できません。誰かが理由を教えてもらえますか?

4

3 に答える 3

55

プロパティを宣言するatomicと、コンパイラは、プロパティへの同時アクセスを防止する追加のコードを生成します。この追加のコードは、セマフォをロックし、プロパティを取得または設定してから、セマフォをロック解除します。プリミティブ値またはポインターの設定または取得と比較して、セマフォのロックとロック解除はコストがかかります (ただし、アプリの全体的なフローを考慮すると、通常は無視できます)。

iOS でのほとんどのクラス、特に UI に関連するクラスはシングル スレッド環境で使用されるため、削除しても安全です(つまり、プロパティはデフォルトで設定されているため、atomic書き込みます)。必要のないものにお金を払いたくない。nonatomicatomic

于 2013-07-10T13:08:50.937 に答える
7

目的 c のアトミックと非アトミックの違いを確認する

アトミック

Atomic は、プロパティの既定の動作です。上記のプロパティを非アトミックとして明示的に設定しないと、アトミックになります。

アトミック プロパティは、値を取得または設定するときにスレッド セーフのレベルを追加します。つまり、プロパティのゲッターとセッターは、他のスレッドが何をしているかに関係なく、常に完全に完了します。トレードオフは、これらのプロパティは、非アトミックな同等のものよりもアクセスが少し遅くなることです。

非アトミック

非アトミック プロパティはスレッド セーフではなく、そのプロパティを直接返します。これはアトミック プロパティよりも高速ですが、予防策が講じられていない場合、明らかにリスクが伴います。

于 2013-07-10T13:09:53.280 に答える