Cocoaはさっぱり!!! version.8at MAC
Cocoaはさっぱり!!! version.8 - 暇つぶし2ch402:名称未設定
07/09/30 23:14:34 J3lW9Bur0
>>400は無視して下さい

>>399で述べたような、autoreleaseによるreleaseの予約を管理しているのがNSAutoreleasePool。
以下の場合、arrayは[pool release]が呼ばれたタイミングでreleaseされる。

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSArray* array = [[NSArray alloc] init];
[array autorelease];
[pool release];

通常、何らかのインスタンス(上の例だとarray)にautoreleaseを呼ぶと、
一番最後に作成されたNSAutoreleasePoolのインスタンス(上の例だとpool)に、
その何らかのインスタンス(上の例だとarray)が登録される。そのNSAutoreleasePoolのインスタンス(上の例だとpool)
が破棄された時に、登録された何らかのインスタンス(上の例だとarray)にreleaseが呼ばれる。

Cocoaアプリのメインスレッドでは、NSApplicationがNSAutoreleasePoolの作成と破棄を繰り返している。
なので通常、自分でNSAutoreleasePoolのインスタンスを作成しなくてもautoreleaseの呼び出しが可能。

サブスレッドでは、NSAutoreleasePoolのインスタンスを自分で作成する必要がある。
また、メインスレッドでも、forやwhile文などのループ内でautoreleaseを何度も呼び出す場合は、
release予約の(つまりメモリ解放されない)インスタンスが増えるので、ループ内で
NSAutoreleasePoolの作成と破棄を繰り返して使用メモリの増大を防ぐという方法がある。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch