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