最近はJavaをまずプログラム言語として始める人が多いだろうから、Objective-Cを使いだした際メモリー管理でつまずくことが多いだろう。わたし自身もすっかりJavaな人になっていたので同様に最初のころハマった。一応メモリー管理についてまとめておこう。 Objective-Cでは10.5からは今時の言語っぽくGabage Collectionが導入されので、Java同様あまりメモリー管理を気にする必要はなくなった。だが、パフォーマンスの問題からなのかXCodeのデフォルトの設定ではオフになっていたりするので、一応レガシィなメモリー管理のお手前も知っておこう。 リファレンスカウンタ、retain/release さすがに大昔のC++のようにnew/deleteで自身で管理ということはなくて、リファレンスカウンタという割と一般的な手法でメモリー管理はなされている。これはある変数について参照が増えるたびにカウントアップ、参照がなくなるごとにカウントダウンしていき、参照カウンタがゼロになった時点でオブジェクトが削除されるという管理方法。Objective-Cの場合、この仕組みが言語でなくCocoaのライブラリレベルで実現されている。 リファレンスカウンタは生成時点で1に、その後 retain メッセージを送るごとに一つ増え、 release するごとに減る。オブジェクトに retainCount というメッセージを送ると現在の参照カウンタを返してくれる。以下のようなコードでテストすると、 ObjectA* objA = [[ObjectA alloc] init]; ObjectA* obj_copy; NSMutableArray* array1 = [NSMutableArray array]; printf("After initializing : %i\n,[objA retainCount]); obj_copy = objA; printf("After assignment : %i\n,[objA retainCount]); [objA retain]; printf("After retain : ...