initWithContentsOfURL:encoding:error:vs stringWithContentsOfURL:encoding:error:

时间:2014-02-10 02:47:42

标签: objective-c

有两种方法可以获取网页html的内容。我应该使用哪个?是否有一些建议如何按情况使用?

NSURL *url = [NSURL URLWithString:@"http://www.apple.co.jp/"];
NSError* error = [[NSError alloc] init];
NSString* content = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
//NSString* content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
NSLog(@"%@", content);

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

initWithContentsOfURL:encoding:error:stringWithContentsOfURL:encoding:error之间的区别在于前者返回一个保留对象而后者返回一个自动释放的对象。如果您使用ARC,则没有语义差异。

您不应为任何一种方法分配NSError个对象,应始终将其初始化为nil

NSError *error = nil;
NSString* content = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

这是因为您传递&error的方法不知道如何处理预先准备好的对象,并且您的对象会泄漏。

最后,因为您要从网页加载数据,所以不应使用NSString方法,但应使用NSURLSession中提到的一组类。最值得注意的是,NSURLRequest