[Objective-C] 詳解 Objective-C 2.0 リファレンスカウンタ 不明なところ - トウヨウリンゴ
http://newringo.blogspot.com/2010/05/objective-c-objective-c-20.html
コードはこちら.
#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;
}
そして,今日わかったのは,詳解 Objective-C 2.0と同じ結果を得るためには,以下のコンパイルをすればよい.
gcc -framework Foundation -m32 reference.m結果
init: 1 retain: 2 retain: 3 release: 2 release: 1 objc[2758]: FREED(id): message retainCount sent to freed object=0x103f60 Illegal instruction
ただ,このオプションで本通りになるというのは,なっとくいかない.
-m32のオプションなしの場合
結果
init: 1 retain: 2 retain: 3 release: 2 release: 1 release: 1
64bit用では,同様の結果が得られないのは,なぜか.
さっぱりだ.
0 件のコメント:
コメントを投稿