下の画像のようにプロジェクト作成時に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 コメント:
コメントを投稿