/***********/
/* 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 件のコメント :
コメントを投稿