[解決済み】新しい自動リファレンスカウント機構はどのように機能するのですか?
質問
どなたかARCの仕組みを簡単に説明してください。ガベージコレクションとは違うのは分かっているのですが、具体的にどのように動作するのかが気になります。
また、もしARCがパフォーマンスを妨げることなくGCと同じことができるのなら、なぜJavaはGCを使うのでしょうか?なぜARCを使わないのでしょうか?
どうすれば解決するの?
Objective-Cを初めて使う開発者は、どのタイミングでオブジェクトを保持し、解放し、自動解放するかという厳格なルールを学ばなければならない。 これらのルールは、メソッドから返されるオブジェクトのretainカウントを意味する命名規則まで指定されています。 これらのルールを心に刻み、一貫して適用すれば、Objective-Cでのメモリ管理はごく自然なものになりますが、最も経験豊富なCocoa開発者でさえ、ときどき失敗することがあります。
LLVMの開発者は、Clang Static Analyzerで、これらのルールが十分に信頼できるものであり、コードが通るパスの中でメモリリークやオーバーリリースの指摘をするツールを構築できることに気づきました。
自動参照カウント (ARC)は次の論理的ステップです。 もしコンパイラがオブジェクトを保持したり解放したりする場所を認識できるのなら、そのコードを挿入してもらえばいいのではないでしょうか。 コンパイラやその仲間たちが得意とするのは、硬直した反復作業です。 人間は忘れ物やミスをしますが、コンピュータはもっと一貫しています。
しかし、このようなプラットフォームでは、メモリ管理の心配から完全に解放されるわけではありません。 私の回答で、注意すべき主な問題(retain cycles)を説明しました。 こちら そのため、弱いポインタをマークするために、少し考える必要があるかもしれません。 しかし、ARCで得られるものに比べれば、そんなことは些細なことです。
手動メモリ管理とガベージコレクションを比較すると、ARCはretain/releaseコードを書く必要をなくし、ガベージコレクション環境で見られる停止やのこぎり歯のメモリプロファイルを持たず、両者の長所を兼ね備えています。 ガベージコレクションの唯一の利点は、retainサイクルを処理できることと、アトミックプロパティの割り当てが安価であることです。 こちら ). 私は、既存のMacのGCコードをすべてARCの実装に置き換えていることを実感しています。
他の言語に拡張できるかどうかについては、Objective-Cの参照カウントシステムを中心に考えられているようです。 Javaや他の言語に適用するのは難しいかもしれませんが、私は低レベルのコンパイラの詳細について十分に知らないので、そこで断定的なことは言えません。 AppleがLLVMでこの取り組みを推進していることを考えると、他の当事者がこの取り組みに大きなリソースを投入しない限り、Objective-Cが最初に来ることになるでしょう。
WWDCでのお披露目は、開発者に衝撃を与えたので、こんなことができるんだという認識がなかったんですね。 いずれ他のプラットフォームにも登場するかもしれませんが、今のところLLVMとObjective-Cに限定しています。
関連
-
[解決済み】何が原因か。switch文からこのcaseラベルにジャンプできない [重複]。
-
[解決済み] クラス 'test_coredataAppDelegate' の重複したインターフェイス宣言
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] Objective-CでNSArrayを逆引きするにはどうしたらいいですか?
-
[解決済み] System.gc()を呼び出すのはなぜ悪い習慣なのですか?
-
[解決済み】Objective-Cの自動参照カウントでは、どのようなリークを防いだり最小化したりできないのですか?
-
[解決済み】ストーリーボードで、複数のコントローラで使用するためのカスタムセルを作成する方法は?
-
[解決済み] 一部のファイルに対する自動参照カウントの無効化
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-Cの#importと#includeの違いは何ですか?
-
[解決済み] インスタンスに送信されたセレクタが認識されない」を解決するには?
-
[解決済み] Xcode 4でNSZombieEnabledを設定するにはどうすればよいですか?
-
[解決済み】NSArrayをアルファベット順に並べるには?
-
[解決済み】Objective-Cのコードをユニットテストするのに最適な方法は何ですか?
-
[解決済み】NSDateで年/月/日を取得する。
-
[解決済み】コンパイルの警告:アーキテクチャi386のファイルを処理するルールがない
-
[解決済み】Objective-Cの自動参照カウントでは、どのようなリークを防いだり最小化したりできないのですか?
-
[解決済み】このブロックで自己を強く捉えると、リテインサイクルになりそうです。
-
[解決済み】Cocoaアプリからターミナルコマンドを実行する