/***********/ /* Class A */ /***********/ @interface A : NSObject { } - (void) dealloc; @end @implementation A - (void) dealloc { printf("I'm released.\n"); [super dealloc]; } @end /**********/ /* main */ /**********/ int main(void) { //自動開放プールの生成 id releasePool = [[NSAutoreleasePool alloc] init]; A *aInstance = [[A alloc] init]; //自動開放プールに登録 [aInstance autorelease]; int index=5; while (index-- > 0) { //ループ毎の自動開放プールを宣言 id rpw = [[NSAutoreleasePool alloc] init]; id a = [[A alloc] init]; //自動開放プールに登録。このメモリはwhileループ毎に開放される [a autorelease]; //ループ単位で自動開放プールの開放を行う。 [rpw release]; } //自動開放プールの開放。ここで登録した全てのインスタンスにreleaseメッセージが送信される。 [releasePool release]; return 0; }
以下、実行結果。ループに入る前に生成した1つとループ内で生成した5つのインスタンスが正しく解放されています。
I'm released.
I'm released.
I'm released.
I'm released.
I'm released.
I'm released.
I'm released.
I'm released.
I'm released.
I'm released.
I'm released.
0 件のコメント :
コメントを投稿