我们可以通过以下代码轻松获取简单的网页内容:
+ (NSString *)getContentWithURL:(NSString *)urlString {
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
if(!data) {
return @"";
} else {
return [NSString stringWithUTF8String:[data bytes]];
}
}
但有人告诉我使用NSURLConnection?
答案 0 :(得分:2)
两者都是不同的东西:
此方法非常适合将data:// URL转换为NSData对象,也可用于同步读取短文件。如果您需要读取可能较大的文件,请使用inputStreamWithURL:打开流,然后一次读取一个文件。
重要说明:请勿使用此同步方法来请求基于网络的网址。对于基于网络的URL,此方法可以在慢速网络上阻止当前线程持续数十秒,从而导致用户体验不佳,而在iOS中,可能会导致应用程序被终止。
sendSynchronousRequest:returningResponse:error:
同步加载构建在类可用的异步加载代码之上。当异步加载系统在专门为此加载请求生成的线程上执行URL加载时,将阻止调用线程。调用线程中不需要特殊的线程或运行循环配置来执行同步加载。
重要事项:由于此调用可能需要几分钟才能失败(特别是在iOS中使用移动网络时),因此不应从GUI应用程序的主线程调用此函数。
答案 1 :(得分:0)
NSURLConnection
方式为您提供有关响应的更多信息。如果请求失败,则NSData
只会获得nil
个数据,而不会提供任何其他内容。使用NSURLConnection
,您还可以获得HTTP响应并向用户显示NSError
。
答案 2 :(得分:0)
NSURLConnection
提供了运行同步/异步请求的灵活性。同样使用NSURLConnection
,您可以使用请求类型get / post / put等发出请求,同时可以使用dataWithContentsOfURL
方法。
答案 3 :(得分:0)
dataWithContentsOfURL
是同步的,这意味着如果您在主线程上运行它,整个UI将锁定,用户将无法执行任何;看起来你的应用程序已经挂起了。
虽然您可能位于快速,可靠的网络上,但请记住,许多iPhone用户处于不可靠且速度较慢的蜂窝网络上。或者他们可能有一个很好的信号,然后开车进入隧道。您不应该假设网络可用或快速。同步网络调用隐含地假设两者。