简单使用NSURLConnection、NSURLRequest和NSURL

下面是代码,注释也写得比较清楚:

头文件需要实现协议NSURLConnectionDelegate和NSURLConnectionDataDelegate

//
//  HttpDemo.h
//  MyAddressBook
//
//  Created by hherima on 14-6-23.
//  Copyright (c) 2014年. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface HttpDemo : NSObject<NSURLConnectionDelegate, NSURLConnectionDataDelegate>
{
    NSMutableData *receivedData;
    NSURLConnection *theConncetion;
}
@end

源文件

//
//  HttpDemo.m
//  MyAddressBook
//
//  Created by hherima on 14-6-23.
//  Copyright (c) 2014年. All rights reserved.
//

#import "HttpDemo.h"
@implementation HttpDemo
/*
 NSURLConnection 提供了很多灵活的方法下载URL内容,也提供了一个简单的接口去创建和放弃连接,同时使用很多的delegate方法去支持连接过程的反馈和控制
 
 举例:
 1、先创建一个NSURL
 2、再通过NSURL创建NSURLRequest,可以指定缓存规则和超时时间
 3、创建NSURLConnection实例,指定NSURLRequest和一个delegate对象
 如果创建失败,则会返回nil,如果创建成功则创建一个NSMutalbeData的实例用来存储数据
 */
- (id)init {
    self = [super init];
    // Override point for customization after application launch.
    NSURLRequest* theRequest = [NSURLRequest requestWithURL:
                                [NSURL URLWithString:@"http://www.baidu.com"]//
                                                cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                            timeoutInterval:60.0];
    //当收到initWithRequest: delegate: 消息时,下载会立即开始,在代理(delegate)
    //收到connectionDidFinishLoading:或者connection:didFailWithError:消息之前
    //可以通过给连接发送一个cancel:消息来中断下载
    theConncetion=[[NSURLConnection alloc]
                   initWithRequest:theRequest delegate:self];
    if(theConncetion)
    {
        //创建NSMutableData
        receivedData = [NSMutableData data];
    }
    else
    {
        //创建失败;
    }
    
    return self;
}


//当服务器提供了足够客户程序创建NSURLResponse对象的信息时,代理对象会收到一个connection:didReceiveResponse:消息,在消息内可以检查NSURLResponse对象和确定数据的预期长途,mime类型,文件名以及其他服务器提供的元信息

//【要注意】,一个简单的连接也可能会收到多个connection:didReceiveResponse:消息当服务器连接重置或者一些罕见的原因(比如多组mime文档),代理都会收到该消息这时候应该重置进度指示,丢弃之前接收的数据
-(void)connection:(NSURLConnection *)connectiondidReceiveResponse:(NSURLResponse*)response
{
    [receivedData setLength:0];
}


//当下载开始的时候,每当有数据接收,代理会定期收到connection:didReceiveData:消息代理应当在实现中储存新接收的数据,下面的例子既是如此
-(void) connection:(NSURLConnection*)connection didReceiveData:(NSData *)data
{
    [receivedData appendData:data];
}


//当代理接收到连接的connection:didFailWithError消息后,对于该连接不会在收到任何消息
-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
    theConncetion = nil;
    
    NSLog(@"Connection failed! Error - %@ %@",[error localizedDescription],[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
    
}
//数据下载完毕,最后,如果连接请求成功的下载,代理会接收connectionDidFinishLoading:消息代理不会收到其他的消息了,在消息的实现中,应该释放掉连接
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
    //do something with the data
    NSString *s = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
    NSLog(@"succeeded %@",s);
    theConncetion = nil;
    [receivedData setLength:0];
}
@end



你可能感兴趣的:(NSURL,NSURLConnection,NSURLRequest)