1
char bytes[] = { 1, 2, 3, 4};
NSString * f = [[NSString alloc] initWithBytes:bytes length:4 encoding:NSASCIIStringEncoding];

[f release];

NSLog(@"%@", [f description]); // Why no 'message sent to deallocated instance "?

[f release];

警告のみが表示され、クラッシュは発生しません..

Test1(26194,0xacf302c0) malloc: *** error for object 0x757c2f0: double free
4

2 に答える 2

1

NSString変だから。(これはクラス クラスタで、 に無料でブリッジされていCFStringます。)

より一般的なオブジェクト (可能な限り単純なケースの など) で同じことを試してみると、NSObject期待どおりに動作することがわかります。(ただし、guard malloc または同様のデバッグ オプションを有効にしない限り、「割り当て解除されたインスタンスにメッセージが送信されました」というエラーはおそらくまったく発生しないことに注意してください。)

于 2012-12-08T06:59:16.013 に答える
0

オブジェクトを解放してからその値をフェッチしているのですが、存在しないオブジェクトにメッセージを送信するにはどうすればよいですか。これを使用してください

char bytes[] = { 1, 2, 3, 4};
 NSString * f = [[NSString alloc] initWithBytes:bytes length:4 encoding:NSASCIIStringEncoding];


NSLog(@"%@", [f description]); // Why no 'message sent to deallocated instance "?

[f release];
于 2012-12-08T06:51:17.143 に答える