我正在查看NSURLConnection
类,该类可用于建立与URL的同步或异步连接,然后检索其数据...... IOS 5对此类进行了大量更改,我已经看到他们介绍了一些与身份验证或下载相关的正式协议,但是我没有看到,例如,connection:didReceiveResponse:
消息(先前发送给代理并且它不再可用)是仍然可以在某些协议中使用..一旦收到响应,如何实现异步连接并检索HTTP标头?我确信有一种方法比使用NSURLConnection
和connection:didReceiveResponse:
消息更好。像stringWithContentsOfURL
这样的方法总是同步加载内容吗?您在应用程序中使用什么来实现异步下载,避免使用已弃用的方法并对_http响应receive_m等事件做出反应?如果可能,您是否在后台任务中启动同步下载?
答案 0 :(得分:68)
NSURLConnectionDelegate
已成为正式协议(在以前的版本中它是非正式协议)。在此协议中,声明了以下(非弃用)方法:
connection:didFailWithError:
connectionShouldUseCredentialStorage:
connection:willSendRequestForAuthenticationChallenge:
此外,有两个符合NSURLConnectionDelegate
的子协议:
NSURLConnectionDataDelegate
用于将数据加载到内存的委托,并声明以下方法,其中一些我相信你会发现它们很熟悉:
connection:willSendRequest:redirectResponse:
connection:didReceiveResponse:
connection:didReceiveData:
connection:needNewBodyStream:
connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
connection:willCacheResponse:
connectionDidFinishLoading:
NSURLConnectionDownloadDelegate
用于将数据直接存储到磁盘文件的委托,并声明以下方法:
connection:didWriteData:totalBytesWritten:expectedTotalBytes:
connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
connectionDidFinishDownloading:destinationURL:
正如您所看到的,您仍然可以使用以前的代表,可能会进行一些小的修改。
有关详细信息,请参阅本地Xcode安装中的iOS 4.3 to iOS 5.0 API Differences document和NSURLConnection.h。发布新的SDK版本时,头文件中的文档比开发人员库中提供的文档更可靠,这并不罕见。后者需要一段时间才能保持最新状态。
答案 1 :(得分:2)
我刚遇到同样的问题。看起来使用块和NSOperationQueue
来简化发送异步请求。
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
这意味着该委托现在仅用于身份验证和失败问题。
答案 2 :(得分:2)
NO! 如果仔细查看Apple的库,它们不仅限于用于身份验证和故障问题。
自从将+(void)sendAsynchronousRequest:queue:completionHandler:
引入NSConnection类对象以来,许多可以执行与以前一样多的NSConnectionDelegate
方法的事情现在可以用在名为“NSConnectionDataDelegate
”的正式协议中。 NSConnectionDownloadDelegate
,打开一个新房间,为NSURLConnection
方法添加更多功能。 (来自iOS5)
所以我认为这是一种改进,不限制它们的使用。
答案 3 :(得分:-1)