困っているのは,以下のコードです.
#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 件のコメント:
コメントを投稿