ガベージコレクションがない時代のプログラミング言語です。プログラマがきちんとオブジェクトを解放するように書かなければなりません。objc_objectへのポインタ型です。すべてのオブジェクトはmallocで確保されるイメージで、これはブロック内のローカル変数(のオブジェクト)を自動的に解放してくれるCより悪い状況です。Objective-Cでは、自動解放プールと、ルールによるオブジェクトの解放で対処します。gccにはライブラリが何も付いていないので、以降はGNUstepを前提とします。NSAutoreleasePoolオブジェクトを生成したら自動解放プールに登録するようにします。自動解放プールが解放されるときに登録されたオブジェクトが解放されます。使ったり、コンテナを拡張して要素たるオブジェクトを解放したりする方法がよく使われます。オブジェクトを生成すると、内部でスタックを構成します。メッセージを送ると、スタックトップのプールに登録されます。オブジェクトを適切に生成することで、オブジェクトの解放時期をコントロールすることもできます。)GUIプログラムでは、イベントループが回るたびに解放処理がおこなわれます。次の例を見てください。0;}クラスFooのオブジェクトをautoreleaseメソッドで自動プールに登録します。プールを解放すると、Fooオブジェクトも解放されます。called.プールを解放するタイミングで、各オブジェクトに対してreleaseが送られます。releaseは参照カウントを減らして、必要があればdeallocを呼び出してオブジェクトを解放します。referenceメモリ管理のルールObjective-Cでは、言語仕様ではなく、運用ルールとして誰がオブジェクトを解放すべきか定めています。Objective-Cでプログラムを書く場合、このルールに従わなければなりません。Rules簡単に訳しておきます。含む名前のメソッドを用いてオブジェクトを生成した場合、呼び出し側がそのオブジェクトを所有する。メソッドを呼び出したときもオブジェクトを所有する。メソッドを呼び出し、オブジェクトを解放しなければならない。所有しないときは、そのオブジェクトを解放してはならない。メソッドを呼び出すか、それをコピーしなければならない。受け取ったオブジェクトは、通常、そのメソッド内部では妥当であり続けることが保証される。メソッドは、オブジェクトをその呼び出し元に安全に返すことができる。マルチスレッドアプリケーションなどではこの限りではない。「後でreleaseメッセージを送る」という意味。次の例は、参照カウントがどのように変わっていくかを表示します。countを減らし、必要があればdeallocを呼び出す。0;}ちょっと長いですが、まず、allocで参照カウントが1になります。(行13)名前がalloc*などでないメソッドでオブジェクトを生成するときは、autoreleaseします。copyでは、ルールによって、autoreleaseせずにオブジェクトを返します。クラスFooでMyStrオブジェクトを所有します。自動プールで解放されないように、retainを送ります。これで参照カウントは2になります。作為的ですが、自動プールを解放する(行75)と、まずMyStrのreleaseが呼び出されます。参照カウントが減らされますが、まだ0ではないので、オブジェクトは解放されません。行78から、Fooオブジェクトを解放したときに、Fooのdeallocを通じて、MyStrオブジェクトが解放されます。CocoaAppleによる文書。Macらしくより詳しい解説があります。Clubここにも、メモリ管理の解説があります。