我最近开始在我的项目中使用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];
}
}
答案 0 :(得分:1)
是
didReceiveResponse
会调用beforeDidReceiveData
,根据Apple文档,可能会在一个连接中多次拨打电话
您应该为您的代表准备接收 connection:didReceiveResponse:单个消息多次 连接;如果响应是多部分MIME,则会发生这种情况 编码。每次代表收到 connection:didReceiveResponse:message,它应该重置任何进度 指示并丢弃所有先前收到的数据(除了 多部分回应的情况)。