ARC - shirai/SwiftLearning GitHub Wiki

ARC

概論

目標

  • ARCの概論について説明できる

わかったこと

メモリ管理

Objective-Cのメモリ管理方式には

  • カウンタ管理方式
  • ARC
  • ガーベジコレクション(←iOSには未対応) の三つがある

カウンタ管理方式

  • カウンタ管理方式は各インスタンスオブジェクトごとに、それが何箇所から参照されているかを示すリファレンスカウンタを用意し、どこからも参照されなくなった時にメモリを解放する方式。  このカウンタ管理方式を進化させたものがARCである
  • あるオブジェクトが他のオブジェクトを参照し、参照されたオブジェクトのリテインカウントが増加する時、参照する側のオブジェクトが「オーナーシップ」を持ったと表現する

ARC

  • ARCを使用するとではリテインカウンタの増減を管理し、リテインカウンタが0になったオブジェクトを、プログラマーが何も記述しなくてもメモリから自動で解放してくれる
  • こうしたリテインカウントのケアを行う変数を「strong」な変数と表現する

ガーベージコレクション

  • ガーベージコレクションとは実行中に不要になった、メモリ領域を発見し、自動的に解放する機能
  • 不要なメモリを解放するルーチンをガーベジコレクタと言う
  • ポインタは解放の対象にならず、スタックや外部変数から辿れないオブジェクトを解放する

つぎにやること

■「詳解Objective-C2.0」第5章読み込み ■「詳解Objective-C2.0」第6章読み込み ■「最新iOSプログラミング徹底解説」第1章読み込み

strong,weak

目標

  • strong,weakの違いを説明できる
  • strong,weakで実施する箇所と理由、誤ると何が起きるかが正しく説明できる

わかったこと

strongとweakの違い

  • strongなプロパティで参照しているオブジェクトは自分自身を解放する時に同時に-releaseメソッドが送られる仕組みである
    • この時複数のオブジェクトが互いにstrongな参照を行っていると、片方をリリースしただけではもう片方の参照が残るため、リテインカウントが1のままで解放されない
  • ここでどちらかをweakで指定すると、参照が切れた瞬間に自身もreleaseするため、メモリを解放できる?

weakの使いどころ

  • Outletプロパティ
    • Outletは基本ビューのサブビューであり、ビューはサブビューのオーナーシップを持っている
    • さらにViewControllerでstrongな参照を持ってしまうと、ビュー自体は破棄されても、そのサブビューの参照は残ってしまい、メモリがもったいない
    • よってweak
  • delegateプロパティ
  • ブロックプロパティ内のself

わからなかったこと

  • 結局weakはどう動いているのか

つぎにやること

■「詳解Objective-C2.0」第5章読み込み ■「最新iOSプログラミング徹底解説」第1章読み込み