Cocoaはさっぱり!!! version.8at MACCocoaはさっぱり!!! version.8 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト400:名称未設定 07/09/30 23:13:19 J3lW9Bur0 とりあえずretainCountの仕組みを ・そのpool releaseをコメントアウトするとコケなくなるのか? 401:名称未設定 07/09/30 23:14:22 /8gv9Izg0 >>399 GCが導入されると、違いは無くなるのですかね?。 402:名称未設定 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の作成と破棄を繰り返して使用メモリの増大を防ぐという方法がある。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch