NSURLSession和NSURLConnection
生活随笔
收集整理的這篇文章主要介紹了
NSURLSession和NSURLConnection
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
iOS9.0之后NSURLConnection被注銷,采用NSURLSession,先介紹NSURLSession,然后介紹NSURLConnection
1.NSURLSession:
post請求:
//1.NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];request.HTTPMethod=@"POST";request.HTTPBody = [@"" dataUsingEncoding:NSUTF8StringEncoding];//2.NSURLSession *session=[NSURLSession sharedSession];NSURLSessionDataTask *dataTask= [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {NSLog(@"NSURLSession加載數(shù)據(jù)。。。。post。。。。。%@",data);}];//3.[dataTask resume];創(chuàng)建請求并設置代理delegate:(NSURLSessionDataDelegate)
//1.確定請求路徑NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];//2.創(chuàng)建請求對象//請求對象內部默認已經(jīng)包含了請求頭和請求方法(GET)NSURLRequest *request = [NSURLRequest requestWithURL:url];//3.獲得會話對象,并設置代理/*第一個參數(shù):會話對象的配置信息defaultSessionConfiguration 表示默認配置第二個參數(shù):誰成為代理,此處為控制器本身即self第三個參數(shù):隊列,該隊列決定代理方法在哪個線程中調用,可以傳主隊列|非主隊列[NSOperationQueue mainQueue] 主隊列: 代理方法在主線程中調用[[NSOperationQueue alloc]init] 非主隊列: 代理方法在子線程中調用 */NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];//4.根據(jù)會話對象創(chuàng)建一個Task(發(fā)送請求)NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];//5.執(zhí)行任務[dataTask resume];delegate協(xié)議方法:
//1.接收到服務器響應的時候調用該方法 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler{//在該方法中可以得到響應頭信息,即responseNSLog(@"didReceiveResponse--%@",[NSThread currentThread]);completionHandler(NSURLSessionResponseAllow);//注意:需要使用completionHandler回調告訴系統(tǒng)應該如何處理服務器返回的數(shù)據(jù)//默認是取消的/*NSURLSessionResponseCancel = 0, 默認的處理方式,取消NSURLSessionResponseAllow = 1, 接收服務器返回的數(shù)據(jù)NSURLSessionResponseBecomeDownload = 2,變成一個下載請求NSURLSessionResponseBecomeStream 變成一個流*/ }//2.接收到服務器返回數(shù)據(jù)的時候會調用該方法,如果數(shù)據(jù)較大那么該方法可能會調用多次 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{NSLog(@"didReceiveData--%@",[NSThread currentThread]);//拼接服務器返回的數(shù)據(jù) } //3.當請求完成(成功|失敗)的時候會調用該方法,如果請求失敗,則error有值-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {NSLog(@"didCompleteWithError--%@",[NSThread currentThread]);if(error == nil){//解析數(shù)據(jù),JSON解析請參考 }}?2.NSURLConnection
普通請求:
/* //1.網(wǎng)址NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];//2.請求NSURLRequest *request=[NSURLRequest requestWithURL:url];//3.隊列NSOperationQueue *queue=[[NSOperationQueue alloc]init];//4.發(fā)送異步請求[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * response, NSData * data, NSError * connectionError) {NSString *content=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"加載成功:%@",content);}];*///同步發(fā)送,要放到另一個線程里,防止阻塞;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];NSURLResponse *response;NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];//&指的是指針;NSString *content=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"NSURLConnection加載數(shù)據(jù)。。。。。。。:%@",content);});代理請求:(NSURLConnectionDataDelegate)
NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];// NSURLResponse *response; [NSURLConnection connectionWithRequest:request delegate:self];代理協(xié)議方法:
// -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{NSLog(@"接到response"); }// -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{NSLog(@"接收數(shù)據(jù)");}
// -(void)connectionDidFinishLoading:(NSURLConnection *)connection{NSLog(@"接收數(shù)據(jù)完成");}
?參考網(wǎng)址:http://www.cnblogs.com/wendingding/p/5168772.html
轉載于:https://www.cnblogs.com/sunjianfei/p/5570578.html
總結
以上是生活随笔為你收集整理的NSURLSession和NSURLConnection的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux_2.6内核内存缓冲与I/O调
- 下一篇: 深度学习数据集+模型说明