(原)URLRequest详解

Fannic原创 (转载请注明出处 http://ylucy.cnblogs.com)

URLRequest的使用实例

// 设置url 
NSURL
* url = [NSURL URLWithString:@"http://www.stackoverflow.com"];

//设置Request
//所构建的NSURLRequest具有
一个依赖于缓存响应的特定策略,cachePolicy取得策略,timeoutInterval取得超时值
NSURLRequest
* request = [NSURLRequest requestWithURL:url
                cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:
60];

// 用这个request和delegate来创建连接  
_connection
= [[NSURLConnection alloc] initWithRequest:request delegate:self];

其中:
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

小常识:

URL loading system class 层次结构如下图所示:

posted @ 2011-05-18 14:46  Fannic  阅读(8824)  评论(0编辑  收藏  举报