首先,让我们看下文件下载。
这里我们下载cnblogs上的一个zip文件。使用NSURLRequest+NSURLConnection可以很方便的实现这个功能。
同步下载文件:
NSString *urlAsString = @"http://files.cnblogs.com/zhuqil/UIWebViewDemo.zip"; NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; /* 下载的数据 */ if (data != nil){ NSLog(@"下载成功"); if ([data writeToFile:@"UIWebViewDemo.zip" atomically:YES]) { NSLog(@"保存成功."); } else { NSLog(@"保存失败."); } } else { NSLog(@"%@", error); }
异步下载文件:
- (void)viewDidLoad { [super viewDidLoad]; //文件地址 NSString *urlAsString = @"http://files.cnblogs.com/zhuqil/UIWebViewDemo.zip"; NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSMutableData *data = [[NSMutableData alloc] init]; self.connectionData = data; [data release]; NSURLConnection *newConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; self.connection = newConnection; [newConnection release]; if (self.connection != nil){ NSLog(@"Successfully created the connection"); } else { NSLog(@"Could not create the connection"); } } - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"An error happened"); NSLog(@"%@", error); } - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"Received data"); [self.connectionData appendData:data]; } - (void) connectionDidFinishLoading :(NSURLConnection *)connection{ /* 下载的数据 */ NSLog(@"下载成功"); if ([self.connectionData writeToFile:@"UIWebViewDemo.zip" atomically:YES]) { NSLog(@"保存成功."); } else { NSLog(@"保存失败."); } /* do something with the data here */ } - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ [self.connectionData setLength:0]; } - (void) viewDidUnload{ [super viewDidUnload]; [self.connection cancel]; self.connection = nil; self.connectionData = nil; }
从上面两段代码中可以看到同步与异步下载的区别,大部分时候我们使用异步下载文件。