Я пытаюсь понять цель 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);
когда я запускаю это как есть, я получаю EXC_BAD_ACCESS
в строке NSLog. Когда я раскомментирую вторую последнюю строку, это работает. Если я изменю printf на назначение, оно перестанет работать снова. Я явно что-то здесь упускаю из-за того, как работает модель памяти, но похоже, что закомментированная строка не должна иметь никакого значения, поскольку она создает новую строку, и она действительно выглядит как printf против присваивания не имеет значения. В отладчике Xcode при сбое программы я вижу, что html
содержит строку HTML, которую я хотел напечатать.