NSAutoreleasePoolの例
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/02 08:13 UTC 版)
「Objective-C」の記事における「NSAutoreleasePoolの例」の解説
int count = 0;// NSAutoreleasePoolのインスタンス化NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];id objFoo = [[Foo alloc] init];id objBar = [[Bar alloc] init];id objBaz = [[Baz alloc] init];// Autorelease poolに登録[objFoo autorelease];[objBar autorelease];[objBaz autorelease];// オブジェクトを参照する変数id qux = objFoo;id fooBar = objBar;[qux retain]; // FooのretainCountは2// Autorelease poolの解放[pool release];count = [qux retainCount]; // Fooをretain後オーナーだったobjFooが解放されたので1count = [fooBar retainCount]; // Barをretainしていないのでエラーcount = [objBaz retainCount]; // ほかの参照がなかったので解放済み。エラーcount = [objBar retainCount]; // fooBarがretainしていなかったのでエラー オーナー(所有者)とは、あるオブジェクトのインスタンスをretainまたはautoreleaseしたオブジェクトないしは変数のことで、上の例で、poolをreleaseする直前ではobjで始まる変数とquxが該当する。 OPENSTEPライブラリは、イベントサイクル単位でAutorelease poolと呼ばれる暗黙の参照元を持っており、オブジェクトをここに登録することでイベント終了時には自動で解放されるオブジェクトを実現している。Macに移植後もNSApplicationクラスに実装されているが、オブジェクトの登録も不要となっている。前述のNSAutoreleasePoolは、NSApplicationクラスが不要なときでも自動解放ができるように用意されたものといえる。 GNU版ランタイム及び、Mac向けのApple版ランタイム(Objective-C 2.0以降)ではガベージコレクションも利用可能だが、iOSに於てはリソースの効率上使用できない。Appleはさらに第三の方式としてARC (Automatic Reference Counting) 方式を開発した。またガベージコレクションはOS X 10.11を最後に廃止されており、それ以降Apple系ではARCが主流となっている。
※この「NSAutoreleasePoolの例」の解説は、「Objective-C」の解説の一部です。
「NSAutoreleasePoolの例」を含む「Objective-C」の記事については、「Objective-C」の概要を参照ください。
- NSAutoreleasePoolの例のページへのリンク