いまさらARCについて調べた
「循環参照しそうな時、@escapingなクロージャを記述する時以外はオーナーシップってあんまり気にしなくなってきたけど、そういやARCってどんな仕組みやっけ?」
と思ったので調べました。
ARCやGC以前
CやC++では、プログラマ自身がメモリ割り当てや解法を行う必要がありました。
ただ熟達したプログラマでも、使用済みのメモリを解放し忘れる。それが重なってメモリリークを起こす。というのはありがちだったそうです。(CやC++はあまり触ったことなくて体験談ではないので申し訳ないですが...
ARCとGC
前述の背景を踏まえて登場したのが、GCです
GCのおかげで、プログラム作成者が明示的にメモリの確保・解放を行う必要が無いため、メモリ管理に関連する陥りやすいバグを回避することができるようになったのですが、ガベージコレクタ自身がCPUを消費してしまう というデメリットがありました。
対してARCはコンパイル時に自動メモリ管理されます。
以下はAppleのドキュメントに書いてあった文章の抜粋です。
ARCはオブジェクトのライフタイム要件を評価し、コンパイル時に適切なメモリ管理呼び出しを自動的に挿入します。コンパイラは適切なdeallocメソッドも生成します。
これにより、実行時のパフォーマンスロスが極めて小さいという特徴があります。
ただ、あくまでメモリ管理呼び出しを自動的に挿入する仕組みなので、アセンブラレベルではretain, releaseしているのを確認できるそうです。
ARCまとめ
Automatic Reference Countingという名前通り、コンパイル時に(ここ重要)自動で参照をカウントする仕組みで、実行時のパフォーマンスロスが極めて小さい。というものでした。
Thanks
新人iOSエンジニアの質問に答えていただいた、社内の先輩方ありがとうございました!
参考
Transitioning to ARC Release Notes
で、結局ARCって何なの?
↑アセンブラでARC確認できる記事
Author And Source
この問題について(いまさらARCについて調べた), 我々は、より多くの情報をここで見つけました https://qiita.com/yosshi4486/items/6137b6934ee7d005dc38著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .