我正在尝试了解客观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字符串。
答案 0 :(得分:3)
尝试NSLog(@“%@”,html)而不仅仅是NSLog(html)