[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
質問
どのような
atomic
と
nonatomic
とは、プロパティ宣言のことでしょうか?
@property(nonatomic, retain) UITextField *userName;
@property(atomic, retain) UITextField *userName;
@property(retain) UITextField *userName;
この3つの操作上の違いは何でしょうか?
どのように解決するのですか?
最後の2つは同じです。"atomic"はデフォルトの動作です(
<ストライク
がない場合にのみ指定されます。
nonatomic
--
atomic
は最近の llvm/clang のバージョンでキーワードとして追加されました)。
メソッド実装を@合成していると仮定すると、アトミックと非アトミックでは生成されるコードが変わってきます。 自分でセッターやゲッターを書いている場合、atomic/nonatomic/retain/assign/copyは単なる助言に過ぎません。 (注意 最近のLLVMでは@synthesizeがデフォルトの動作になりました。 また、インスタンス変数を宣言する必要はありません。インスタンス変数も自動的に合成され、その変数には
_
を名前の前につけて、誤って直接アクセスできないようにしています。)
atomic"を使用すると、合成されたセッター/ゲッターは必ず 全体 の値は、他のスレッドでのセッターの動作に関係なく、常にゲッターから返されるか、セッターによって設定されます。 つまり、スレッドAがゲッターの最中にスレッドBがセッターを呼び出した場合、実際に実行可能な値、おそらくオートリリースオブジェクトがAの呼び出し元に返されます。
で
nonatomic
このような保証はありません。 このように
nonatomic
は、"atomic" よりもかなり高速です。
atomic"は何をするのか? ではなく は、スレッドセーフを保証するものではありません。 スレッド A がゲッターを呼び出し、スレッド B と C が異なる値でセッターを呼び出した場合、スレッド A は 3 つの値のうちのどれかを返すかもしれません - セッターが呼ばれる前の値、または B と C のセッターに渡された値のいずれかです。
マルチスレッドプログラミングの主要な課題の1つであるデータの完全性の確保は、別の手段で達成されます。
これにプラスして
atomicity
も、複数の依存するプロパティが存在する場合、スレッドセーフを保証することはできません。
考えてみてください。
@property(atomic, copy) NSString *firstName;
@property(atomic, copy) NSString *lastName;
@property(readonly, atomic, copy) NSString *fullName;
この場合、スレッドAは、オブジェクトの名前を変更するために
setFirstName:
を呼び出した後
setLastName:
. その間に、スレッド B は
fullName
は、スレッドAの2回の呼び出しの間に、新しい名字と古い名字を組み合わせて受け取ることになります。
これに対応するためには
トランザクションモデル
. つまり、他の何らかの同期化および/または除外を行うことで、以下のようなアクセスを除外することができます。
fullName
依存するプロパティが更新されている間
関連
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] すべてのセレクションセグメンテーションの違いは何ですか?
-
IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] HTMLのプロパティと属性の違いは何ですか?
-
[解決済み] クラスメソッドとインスタンスメソッドの違いは何ですか?
-
[解決済み] objectForKeyとvalueForKeyの違い?
-
[解決済み】atomic / volatile / synchronizedの違いは何ですか?
-
[解決済み】Objective-Cのstrongとweakの違い。
-
[解決済み] Nonatomic "とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
クラッシュエラー libc++abi.dylib: NSException 型のキャッチできない例外で終了_allanGold のブログ - ProgrammerITS401
-
[解決済み] アトミック属性と非アトミック属性の違いは何ですか?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] 文字列の長さを取得する
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] UITextFieldのテキストインセット?
-
[解決済み] 16進カラーバリューの使用方法
-
[解決済み] iPhoneでナビゲーションバーを1ページ目だけ非表示にする