我最近开始在我的项目中使用NSURLConnection,我想知道用于处理接收到的数据的模式是否合适。
如果我得到404或其他错误,我实际上不想对数据做任何事情,所以仍然将它追加到我的对象中是一种浪费。因此,我只希望在获得200状态后创建数据对象。
假设-connection:didReceiveResponse:在任何-connection:didReceiveData:回调之前被调用是安全的吗?
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.data appendData:data];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response
{
if (response.statusCode == 200) {
self.data = [NSMutableData data];
}
else {
NSLog(@"Connection failed with status code %d", response.statusCode);
[self.connection cancel];
}
}发布于 2014-01-29 15:13:17
是的,didReceiveResponse会打电话给beforeDidReceiveData,而且根据苹果文档,它可能在一个连接中多次接到电话。
您应该为您的委托做好准备,以便接收连接:didReceiveResponse: message多次用于单个连接;如果响应采用多部分MIME编码,则可能发生这种情况。每次委托接收到连接:didReceiveResponse: message时,它都应该重置任何进度指示,并丢弃以前接收的所有数据(多部分响应除外)。
https://stackoverflow.com/questions/21434629
复制相似问题