//聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄
01.NSURLConnection下載
================================================================================
1>NSURLResponse屬性
URL客戶端請求的URL
MIMEType告訴客戶端返回的二進制數(shù)據(jù)可以用什么軟件打開
expectedContentLength二進制數(shù)據(jù)(下載文件)的長度
textEncodingName文本編碼名稱鱼辙,UTF8/GB2312
suggestedFilename建議的文件名
*** NSURLConnection做簡單的網(wǎng)絡(luò)連接非常簡單,但是復雜的網(wǎng)絡(luò)操作校赤,非常麻煩
2>使用異步方法下載文件
問題:
1.沒有進度
2.會有瞬間的內(nèi)存峰值
3>使用代理方法下載文件
#pragma mark - NSURLConnectionDataDelegate方法
// 1.接收到服務(wù)器響應(yīng)躁锡,下載前的準備工作
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
}
// 2.接收到服務(wù)器數(shù)據(jù)午绳,可能會多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
}
// 3.數(shù)據(jù)接收完成
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
}
// 4.出現(xiàn)錯誤,提示網(wǎng)絡(luò)操作千萬不要忘記出錯處理
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
}
問題:
1.在iPhone5上會出現(xiàn)峰值
2.不過可以跟進進度
4>每次接收到數(shù)據(jù)逐一寫入文件——可以解決內(nèi)存峰值的問題
問題:
1.多線程
[conn setDelegateQueue:[[NSOperationQueue alloc] init]];
2.UI更新
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate date]];
02.NSURLSession介紹
================================================================================
是iOS7新推出的網(wǎng)絡(luò)解決方案映之,解決了NSURLConnection中的很多問題拦焚。
NSURLSession的使用相對有些復雜,對于簡單網(wǎng)絡(luò)的網(wǎng)絡(luò)請求杠输,仍然可以使用NSURLConnection赎败。
三個任務(wù)
1>NSURLSessionDataTask傳統(tǒng)的GET / POST方法,包括POST上傳文件
2>NSURLSessionDownloadTask下載任務(wù)
3>NSURLSessionUploadTask上傳任務(wù)- PUT方式的文件上傳
03.NSURLSession下載演練
================================================================================
1>通過塊代碼回調(diào)實現(xiàn)下載
NSURLSession *session = [NSURLSession sharedSession];
[[session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
NSLog(@"%@ %@", location.path, [NSThread currentThread]);
}] resume];
特點:
1.沒有內(nèi)存峰值
2.文件直接保存在臨時目錄蠢甲,如果不做進一步處理僵刮,會直接刪除
3.完成塊代碼同樣運行在后臺線程
2>下載進度跟進
- (void)viewWillDisappear:(BOOL)animated {
//自定義Session會對self進行強引用,在視圖消失之前應(yīng)該取消session的所有任務(wù)鹦牛,否則會造成內(nèi)存泄漏
[self.session invalidateAndCancel];
}
3>斷點續(xù)傳
- (void)downloadURL:(NSURL *)url {
self.downloadTask = [self.session downloadTaskWithURL:url];
[self.downloadTask resume];
}
- (void)pause {
[self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {
self.resumeData = resumeData;
self.downloadTask =nil;
}];
}
- (void)resume {
if(self.resumeData ==nil) {
return;
}
self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];
self.resumeData =nil;
[self.downloadTask resume];
}