除非首先操作和打印NSString,否则NSLog上的EXC_BAD_ACCESS

时间:2011-05-09 02:46:02

标签: objective-c

我正在尝试了解客观C,所以我编写了下面的代码来尝试打印网页的内容:

id url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest* req = [NSURLRequest requestWithURL:url];
NSURLResponse* resp = [NSURLResponse new];
NSURLConnection* conn = [NSURLConnection new];
NSError* error = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:req returningResponse:&resp error:&error];
NSString* html = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//    printf([[html substringToIndex:50] cString]);
NSLog(html);

当我按原样运行时,我在NSLog行上得到EXC_BAD_ACCESS。当我取消注释倒数第二行时,它可以工作。如果我将printf更改为赋值,它将再次停止工作。我在这里明显遗漏了关于内存模型如何工作的一些内容,但似乎注释掉的行不应该有任何区别,因为它创建了一个新的字符串,而真的似乎就像printf vs一个赋值不应该有所作为。在程序崩溃的Xcode调试器中,我可以看到html确实包含我想要打印的HTML字符串。

1 个答案:

答案 0 :(得分:3)

尝试NSLog(@“%@”,html)而不仅仅是NSLog(html)