URLRequest 的一个实例
- //Createtherequest.
- //所构建的NSURLRequest具有一个依赖于缓存响应的特定策略,cachePolicy取得策略,timeoutInterval取得超时值
- NSURLRequest*theRequest=[NSURLRequestrequestWithURL:[NSURLURLWithString:@"http://www.apple.com/"]
- cachePolicy:NSURLRequestUseProtocolCachePolicy
- timeoutInterval:60.0];
- //createtheconnectionwiththerequest
- //andstartloadingthedata
- NSURLConnection*theConnection=[[NSURLConnectionalloc]initWithRequest:theRequestdelegate:self];
- if(theConnection){
- //CreatetheNSMutableDatatoholdthereceiveddata.
- //receivedDataisaninstancevariabledeclaredelsewhere.
- receivedData=[[NSMutableDatadata]retain];
- }else{
- //Informtheuserthattheconnectionfailed.
- }
其中:
NSURLRequest默认的cache policy是
NSURLRequestUseProtocolCachePolicy, 是最能保持一致性的协议。
NSURLRequestReloadIgnoringCacheData忽略缓存直接从原始地址下载
NSURLRequestReturnCacheDataElseLoad只有在cache中不存在data时才从原始地址下载
NSURLRequestReturnCacheDataDontLoad允许app确定是否要返回cache数据,如果使用这种协议当本地不存在response的时候,创建NSURLConnection or NSURLDownload实例时将会马上返回nil;这类似于离线模式,没有建立网络连接;
你只需要实现以下delegate方法来处理数据响应
- (void)connection:(NSURLConnection*)connection didReceiveResponse:(NSHTTPURLResponse*)response
- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
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 输出参数, 如果在处理请求的过程中发生错误,就会使用. 无错误,就为NULL
一个实现异步get请求的例子:
- NSString*url=[NSStringstringWithFormat:@"http://localhost/chat/messages.php?past=%ld&t=%ld",
- lastId,time(0)];
- NSMutableURLRequest*request=[[[NSMutableURLRequestalloc]init]autorelease];
- [requestsetURL:[NSURLURLWithString:url]];
- [requestsetHTTPMethod:@"GET"];
- NSURLConnection*conn=[[NSURLConnectionalloc]initWithRequest:requestdelegate:self];
- if(conn)
- {
- receivedData=[[NSMutableDatadata]retain];
- }
- else
- {
- }
- -(void)timerCallback{
- //[timerrelease];
- [selfgetNewMessages];
- }
- -(void)connection:(NSURLConnection*)connectiondidReceiveResponse:(NSURLResponse*)response
- {
- [receivedDatasetLength:0];
- }
- -(void)connection:(NSURLConnection*)connectiondidReceiveData:(NSData*)data
- {
- [receivedDataappendData:data];
- }
- -(void)connectionDidFinishLoading:(NSURLConnection*)connection
- {
- if(chatParser)
- [chatParserrelease];
- if(messages==nil)
- messages=[[NSMutableArrayalloc]init];
- chatParser=[[NSXMLParseralloc]initWithData:receivedData];
- [chatParsersetDelegate:self];//setthedelegate
- [chatParserparse];//startparse
- [receivedDatarelease];
- [messageListreloadData];
- NSInvocation*invocation=[NSInvocationinvocationWithMethodSignature:
- [selfmethodSignatureForSelector:@selector(timerCallback)]];
- [invocationsetTarget:self];
- [invocationsetSelector:@selector(timerCallback)];
- //timer=[NSTimerscheduledTimerWithTimeInterval:5.0invocation:invocationrepeats:NO];
- [NSTimerscheduledTimerWithTimeInterval:5.0invocation:invocationrepeats:NO];//ifsetyes,thenvery5secondsupdatathetable
- }
- //初始化请求
- NSMutableURLRequest*request=[[NSMutableURLRequestalloc]init];
- //设置URL
- [requestsetURL:[NSURLURLWithString:urlStr]];
- //设置HTTP方法
- [requestsetHTTPMethod:@"GET"];
- //发送同步请求,这里得returnData就是返回得数据了
- NSData*returnData=[NSURLConnectionsendSynchronousRequest:request
- returningResponse:nilerror:nil];
- //释放对象
- [requestrelease];
from:http://blog.csdn.net/bl1988530/article/details/6590099