Pages

2011年10月29日土曜日

Xcode4.2 ARC

Xcode4.2では、ARCという機能が追加されています。

下の画像のようにプロジェクト作成時にUse Automatic Reference Counting
という項目にチェックしていれば有効になります。


要は名前からもわかるように参照カウントを自動でやってくれる機能ということです。
ガベージコレクション(GC)というやつですね。

これまでは、retainとかreleaseとかautoreleaseとかを使って
自分でメモリの管理をやらないといけませんでした。
下手をするとメモリリークを招いてしまうということです。

その昔、C言語をずっと使っていた私にとっては、
自分でメモリ管理するのが普通で、間違えさえしなければ問題が起こることは無く、
さらに自分でどうなっているかを常に把握できるということで、
この方式以外と性に合ってるなって思ってました。

逆にJavaとかだと解放したいときにできないような気がして不安でした。
でも、やってるうちに慣れては来たんですけどね。

Xcode4.2になって、iOSアプリの開発でもメモリ管理を任せられるようになった
ということのようですね。チェックを外せば従来通りです。

その証拠に



retainとかreleaseというメソッドは呼び出せないようになっています。
deallocも使いません。

だから下の二つは結果同じことになるということですね。

object1 = [[NSString alloc] initWithString:@"STRING"];
object1 = [NSString stringWithString:@"STRING"];

また、スタック変数にいくらallocとinitで代入してもメソッドを出ると解放されてしまいます。

- (void)method {
  NSString* string = [[NSString alloc] initWithString:@"STRING"];
}

今までは、メソッド内でこんなことやって、releaseせずに放っておくと
メモリ内にずっと残り続けることになっていたのですが、
今回のARCでは、スタック変数が破棄された時点で参照カウントがゼロになるので、
結果としては、autoreleaseと同じことになるってことみたいですね。

0 コメント:

コメントを投稿