まず、プログラミング言語である Objective-C にはメモリ管理の概念がありません。メモリ管理は Foundation (Mac OS X の Cocoa と iPhone OS の Cocoa Touch の共通フレームワーク) に組み込まれています。Foundation は、Objective-C ランタイムのおよび関数の上にalloc、 、retain、releaseおよびを便利なラッパーとして実装するルートクラス NSObject を追加します。autoreleaseclass_createInstance()object_dispose()
Objective-C はメモリ管理にとらわれないため、ガベージ コレクションを追加し、NSObjectノーオペレーションですべてのメモリ管理メソッドを作成するのは非常に簡単でした。しかし、iPhone OS と従来の Mac OS X にはガベージ コレクションがなく、代わりに Cocoa の参照カウント スキームを使用しています。
Foundation で、またはFoundation からallocクラス メソッドを呼び出すと、オブジェクトが作成されます。これらのデフォルトの実装は呼び出しを行うため、手動で行う必要はありません。NSObjectNSProxyclass_createInstance()
deallocがルート クラスで実行されると、オブジェクトは「死にます」NSObject。これは、ヒープ上のオブジェクトのメモリが を呼び出すことによって解放されるときです。Foundation から継承するか、Foundation からobject_dispose()継承する限り、この関数を自分で呼び出す必要はありません。NSObjectNSProxy
自動解放されたオブジェクトは、ランタイムに関する限り、特別に扱われることはありません。自動解放されたオブジェクトは、他のオブジェクトと同じように機能します。autoreleaseオブジェクトがおおよそである場合に何が起こりますか。
-(id)autorelease; {
[NSAutoreleasePool addObject:self]; // retain count +1
[self release]; // retain count -1
return self;
}
呼び出しautoreleaseによって保持カウントが減少することはなく、オブジェクトの所有権が呼び出し元から現在の自動解放プールに転送されるだけです。後で現在の自動解放プールがreleaseなくなると、それが所有するすべてのオブジェクトが呼び出され、他のオブジェクトによって所有されなくなったオブジェクトは解放されます。