NSURLConnection和NSURLSession都是網(wǎng)絡(luò)請求類!
它們都可以實現(xiàn)數(shù)據(jù)請求和上傳數(shù)據(jù)。
NSURLConnection這個API未來將會被NSURLSession取代拆融!因為在 2013 的 WWDC 上,蘋果推出了 NSURLConnection
的繼任者:NSURLSession行嗤。-
現(xiàn)在主流的網(wǎng)絡(luò)開發(fā)框架AFNetworking瓤帚,已經(jīng)是添加了NSURLSession相關(guān)的支持了悼泌。
NSURLSession包括了與之前相同的組件松捉,NSURLRequest與 NSURLCache,但是把 NSURLConnection 替換成了NSURLSession馆里、NSURLSessionConfiguration
以及 NSURLSessionTask
的 3 個子類:
-NSURLSessionDataTask
-NSURLSessionUploadTask
-NSURLSessionDownloadTask這 3 個子類封裝了現(xiàn)代程序三個最基本的網(wǎng)絡(luò)任務(wù):獲取數(shù)據(jù)隘世,比如 JSON 或者 XML,上傳文件和下載文件鸠踪。
NSURLSessionDownloadTask:下載用的Task;
NSURLSessionDataTask:可以上傳內(nèi)容丙者,上傳完成后再進行下載;
NSURLSessionUploadTask:上傳用的Task,傳完以后不會再下載返回結(jié)果(是NSURLSessionDataTask的子類);-
補充一下:
1-->NSURL
1> 將字符串轉(zhuǎn)為網(wǎng)絡(luò)資源定位符 + (instancetype)URLWithString:(NSString *)URLString;
2.--->NSData
1> 同步獲取網(wǎng)絡(luò)數(shù)據(jù)
+ (instancetype)dataWithContentsOfURL:(NSURL *)url;
2> 異步獲取網(wǎng)絡(luò)數(shù)據(jù)(召喚一個人幫你干活的意思S堋P得健!)
+ (void)detachNewThreadSelector:(SEL)selector toTarget:(id)target withObject:(id)argument;
3.--->NSURLRequest
1> 創(chuàng)建請求
+ (instancetype)requestWithURL:(NSURL *)URL;
4、---->NSURLResponse
1> 獲取資源的總大小
@property (readonly) long long expectedContentLength;
2> 獲取資源的名字
@property (readonly, copy) NSString *suggestedFilename;
NSURLConnection的介紹纷捞!
NSURLConnection是可以實現(xiàn)同步和異步的痢虹。但別忘了要實現(xiàn)代理<NSURLConnectionDataDelegate>
-可以實現(xiàn)同步和異步請求:
1> 向服務(wù)器發(fā)起同步請求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
2> 向服務(wù)器發(fā)起異步請求
+ (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
同步請求:
// urlStr有中文 NSString *urlStr = @"http://img.pconline.com.cn/images/upload/upc/tx/photoblog/1512/22/c7/16739418_1450755319331_mthumb.jpg"; // 注意有中文要進行轉(zhuǎn)碼,轉(zhuǎn)為UTF8 NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; // 請求類 NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 服務(wù)器響應(yīng) NSURLResponse *response = [[NSURLResponse alloc] init]; NSLog(@"--開始下載--"); // sync 同步 async異步 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; NSLog(@"--下載完成--"); NSLog(@"%ld",data.length);
-
異步請求:
NSString *urlStr = @"http://127.0.0.1/dataSource/阿安踏.json";
// 帶中文主儡,要轉(zhuǎn)換
NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest request = [NSURLRequest requestWithURL:url];
// 異步請求
// + (NSURLConnection)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
_connection = [NSURLConnection connectionWithRequest:request delegate:self];// 狀態(tài)欄中顯示網(wǎng)絡(luò)狀態(tài) [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; }
代理方法:
NSURLConnection代理方法
1> 下載數(shù)據(jù)失敗
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
2> 接收到數(shù)據(jù)【數(shù)據(jù)較多時會執(zhí)行多次】
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
3> 接受到服務(wù)器的響應(yīng)
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
4> 數(shù)據(jù)接收完成
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
NSURLSession介紹
-
NSURLSession[都是異步操作奖唯,且這是一個單例類]
-1> 方法一-
(NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler
2> 方法二
-
(NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler
3> 開始執(zhí)行操作
(void)resume;
// 開始執(zhí)行操作
[task resume];
-
-
-
簡單使用:
// 構(gòu)建session
NSURLSession *session = [NSURLSession sharedSession];// 單利類
// 網(wǎng)絡(luò)請求地址
NSString *urlStr = @"http://127.0.0.1.local/dataSource/LV-價格.json";
// task
NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",dict);
}];// 開始執(zhí)行操作 [task resume];