首页 > 其他分享 >NSURLConnection和NSURLRequest

NSURLConnection和NSURLRequest

时间:2023-03-30 18:06:38浏览次数:31  
标签:NSURLRequest receivedData connection error NSURLConnection data


iOS中我们可以通过NSURLRequest和NSURLConnection来建立一些HTTP请求下载数据等等

先看一个例子:




NSURLConnection和NSURLRequest_iOS



NSURLRequest *theRequest=[NSURLRequest requestWithURL:    
                  [NSURL URLWithString:@“http://www.baidu.com/”]    
                 cachePolicy:NSURLRequestUseProtocolCachePolicy    
                 timeoutInterval:60.0];    
NSURLConnection *theConnection[[NSURLConnection alloc]         
                   initWithRequest:theRequest delegate:self];    
if(theConnection)    
{    
//创建NSMutableData    
  receivedData=[[NSMutableData data] retain];    
}else // 创建失败



NSURLConnection和NSURLRequest_iOS



先创建一个NSURLRequest,设置好URL和cachePolicy,timeoutInterval。

cachePolicy有以下几种:



NSURLRequest默认的cache policy是NSURLRequestUseProtocolCachePolicy, 是最能保持一致性的协议。



NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载



NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载



NSURLRequestReturnCacheDataDontLoad 允许app确定是否要返回cache数据,如果使用这种协议当本地不存在response的时候,创建NSURLConnection or NSURLDownload实例时将会马上返回nil;这类似于离线模式,没有建立网络连接;




然后通过NSURLRequest来构建NSURLConnection,设置delegate,通过返回的theConnection 来判断是否创建成功。




其中delegate要实现一下几个方法:供NSURLConnection来回调



NSURLConnection和NSURLRequest_iOS



- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    // This method is called when the server has determined that it
    // has enough information to create the NSURLResponse.
 
    // It can be called multiple times, for example in the case of a
    // redirect, so each time we reset the data.
 
    // receivedData is an instance variable declared elsewhere.
    [receivedData setLength:0];
}



NSURLConnection和NSURLRequest_iOS



- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to receivedData.
    // receivedData is an instance variable declared elsewhere.
    [receivedData appendData:data];
}



NSURLConnection和NSURLRequest_iOS



- (void)connection:(NSURLConnection *)connection
  didFailWithError:(NSError *)error
{
    // release the connection, and the data object
    [connection release];
    // receivedData is declared as a method instance elsewhere
    [receivedData release];
 
    // inform the user
    NSLog(@"Connection failed! Error - %@ %@",
          [error localizedDescription],
          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}



NSURLConnection和NSURLRequest_iOS



NSURLConnection和NSURLRequest_iOS



- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // do something with the data
    // receivedData is declared as a method instance elsewhere
    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
 
    // release the connection, and the data object
    [connection release];
    [receivedData release];
}



NSURLConnection和NSURLRequest_iOS




NSURLConnect还提供了一个方便的类方法(class method) : sendSynchronousRequest:returningResponse:error:可用来 同步地加载一个URL请求



+ (NSData *)sendSynchronousRequest: (NSURLRequest *)request returningResponse: (NSURLResponse **)response error: (NSError **)error



  • request 要装载的URL请求. 这个request 对象 作为初始化进程的一部分,被深度复制(deep-copied). 在这个方法返回之后, 再修改request, 将不会影响用在装载的过程中的request
  • reponse 输出参数, 由服务器返回的URL响应
  • error   输出参数, 如果在处理请求的过程中发生错误,就会使用. 

标签:NSURLRequest,receivedData,connection,error,NSURLConnection,data
From: https://blog.51cto.com/u_548275/6159962

相关文章