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,对于最简单的情况),你会看到事情的表现更符合预期。(但请注意,除非您启用保护 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 回答