困っているのは,以下のコードです.
#import <Foundation/Foundation.h>
#import <stdio.h>
int main(void)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSObject *obj = [[NSObject alloc] init];
printf("init: %d\n",[obj retainCount]);
[obj retain];
printf("retain: %d\n",[obj retainCount]);
[obj retain];
printf("retain: %d\n",[obj retainCount]);
[obj release];
printf("release: %d\n",[obj retainCount]);
[obj release];
printf("release: %d\n",[obj retainCount]);
[obj release];
/* 実行するとエラーになるはずなのだが・・・ */
printf("release: %d\n",[obj retainCount]);
[pool drain];
return 0;
}
コンパイル gcc -framework Foundation reference.m
環境 os 10.6.2
出力結果
init: 1 retain: 2 retain: 3 release: 2 release: 1 release: 1
obj にreleaseメッセージを3回送ったあとに,参照カウンタを見ようとしたらエラーになるはずですが,参照カウンタが1と表示されてしまいます.
何故なんでしょうか.
0 件のコメント:
コメントを投稿