亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS學習--網絡基礎

2019-11-14 18:39:26
字體:
來源:轉載
供稿:網友

Get & Post請求

•網絡訪問的四個步驟

–地址
–請求
–連接
–處理結果
•iOS網絡處理常用類
–NSURL(地址)
–NSRequest[GET]& NSMutableURLRequest[POST](請求)
–NSConnection(連接)
•實現NSURLConnectionDataDelegate代理方法可以接收服務器響應數據(處理結果)
 
關于代理的方法:
•代理方法存在的問題
–代理方法較多,比較分散
–要處理一個請求,需要在很多地方編寫代碼
–不利于邏輯實現、代碼編寫、調試、維護以及擴展
–尤其當存在多個請求時會變得非常麻煩!
•已經學習過的代理方法
–UIapplicationDelegate
–UITableViewDelegate、UITableViewDataSource
–UITextFieldDelegate
–通過協議自定義代理方法
–NSURLConnectionDataDelegate
 
同步和異步請求:
•NSURLConnection提供了兩個靜態方法可以直接同步或異步調用NSURLRequest,而無需通過NSURLConnectionDataDelegate獲取數據
•同步請求:

sendSynchronousRequest:request returningResponse:&response error:&error

•異步請求:

sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)

有關主操作隊列的內容,在多線程課程講解

 
緩存策略:
•NSURLRequest的cachePolicy屬性可以設置緩存策略,這是一種內存緩存,非硬盤緩存
•使用緩存的目的是為了使用的應用程序能更快速的響應用戶輸入,使程序高效的運行。有時候我們需要將遠程web服務器獲取的數據緩存起來,減少對同一個url多次請求
•cachePolicy支持的緩存策略包括:
–NSURLRequestUsePRotocolCachePolicy 默認的緩存策略,要在協議的實現方法中指定緩存邏輯
–NSURLRequestReloadIgnoringCacheData 忽略緩存從原始地址下載
–NSURLRequestReturnCacheDataElseLoad 沒有緩存時從原始地址下載
–NSURLRequestReturnCacheDataDontLoad 只使用緩存,如果不存在緩存,請求失敗,適用于沒有建立網絡連接離線模式
–NSURLRequestReloadIgnoringLocalAndRemoteCacheData 忽略本地和遠程的緩存數據,直接從原始地址下載,與NSURLRequestReloadIgnoringCacheData類似
–NSURLRequestReloadRevalidatingCacheData 驗證本地數據與遠程數據是否相同,如果不同則下載遠程數據,否則使用本地數據
 

同步請求數據會造成主線程阻塞,通常在請求大數據或網絡不暢時不建議使用。

        從上面的代碼可以看出,不管同步請求還是異步請求,建立通信的步驟基本是一樣的:

         1、創建NSURL

         2、創建Request對象

         3、創建NSURLConnection連接。

         NSURLConnection創建成功后,就創建了一個http連接。異步請求和同步請求的區別是:創建了異步請求,用戶可以做其他的操作,請求會在另一個線程執行,通信結果及過程會在回調函數中執行。同步請求則不同,需要請求結束用戶才能做其他的操作。

(今天學習關于網絡的基礎,代碼有一些重復,緩存策略還沒有學習)

下面是get和post方式的代碼:

#pragma mark - 測試get方式-(IBAction)getLogin:(UIButton *)btn{    static NSString * loginUrl =@"http://192.168.1.102:8080/IOSApplication/LoginServletController.do";        //初始化數據    _receiveDate = [NSMutableData data];        //定義URL    NSString * urlStr = [NSString stringWithFormat:@"%@?username=%@&passWord=%@",loginUrl,_userName.text,_password.text];        // 注意:網絡請求的URL,需要編碼才可以使用?。。    NSURL *url = [NSURL URLWithString:urlStr];        //// 定義請求    NSURLRequest *request = [NSURLRequest requestWithURL:url];        //定義連接    NSURLConnection *cont = [[NSURLConnection alloc] initWithRequest:request delegate:self];        [cont start];}#pragma mark - 網絡連接錯誤判斷-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{    NSLog(@"網絡連接錯誤%@",error.localizedDescription);}#pragma mark - 接收響應- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{    NSLog(@"開始接收的響應");}#pragma mark - 收到數據- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{    NSLog(@"收到服務器返回的數據:%@",data);        [_receiveDate appendData:data];}#pragma mark - 連接結束-(void)connectionDidFinishLoading:(NSURLConnection *)connection{    NSString *backString = [[NSString alloc]initWithData:_receiveDate encoding:NSUTF8StringEncoding];    NSLog(@"結束接收的數據 %@",backString);        _receiveDate = nil;}#pragma mark - 測試post方式-(IBAction)postLogin:(UIButton *)btn{        static NSString * loginUrl =@"http://192.168.1.102:8080/IOSApplication/LoginServletController.do";        //初始化數據    _receiveDate = [NSMutableData data];        // 定義URL,字母及數字組成的url不需要編碼    NSURL * url = [NSURL URLWithString:loginUrl];        //定義請求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];        //等待服務器響應時間5    [request setTimeoutInterval:5.0];        //設置請求方式    [request setHTTPMethod:@"post"];    NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@",_userName.text,_password.text];        //生成請求數據并編碼    NSData *body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];        // 設置HTTP請求數據體,NSMutableURLRequest會自動在請求頭中加入Content-Length    [request setHTTPBody:body];        //設置連接    NSURLConnection *cont = [[NSURLConnection alloc]initWithRequest:request delegate:self];        //開始連接    [cont start];    }#pragma mark - 發送數據給服務器,POST請求使用此方法- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite{    NSLog(@"發送數據給服務器 bytesWritten: %ld, totalBytesWritten %ld totalBytesExpectedToWrite %ld", bytesWritten,totalBytesWritten,totalBytesExpectedToWrite);}

 

下面是同步和異步(NSURLConnection提供了兩個靜態方法可以直接同步或異步調用NSURLRequest,而無需通過NSURLConnectionDataDelegate獲取數據)

//生成post請求-(NSMutableURLRequest *)postLoginRequest{        static NSString * loginUrl =@"http://192.168.1.102:8080/IOSApplication/LoginServletController.do";        //初始化數據    _receiveDate = [NSMutableData data];        // 定義URL,字母及數字組成的url不需要編碼    NSURL * url = [NSURL URLWithString:loginUrl];        //定義請求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];        //等待服務器響應時間5    [request setTimeoutInterval:5.0];        //設置請求方式    [request setHTTPMethod:@"post"];        NSString *bodyString = [NSString stringWithFormat:@"username=%@&password=%@",_userName.text,_password.text];        //生成請求數據并編碼    NSData *body = [bodyString dataUsingEncoding:NSUTF8StringEncoding];        // 設置HTTP請求數據體,NSMutableURLRequest會自動在請求頭中加入Content-Length    [request setHTTPBody:body];        return request;}#pragma mark - post 同步方式登錄-(IBAction) synchronizationLogin:(UIButton *)btn{    NSMutableURLRequest *request = [self postLoginRequest];    NSError *error;    NSURLResponse *response;        NSDate * date = [NSURLConnection  sendSynchronousRequest:request returningResponse:&response error:&error];        // 注意,只有同步請求結束之后,才會執行后續操作,修改LOGIN_URL可以看到效果    if (!date) {        NSLog(@"同步訪問錯誤:%@",error.localizedDescription);    }    else{        //解碼數據        NSString *string = [[NSString alloc]initWithData:date encoding:NSUTF8StringEncoding];        NSLog(@"同步數據 %@",string);    }}#pragma mark - post 異步方式登錄-(IBAction)asynchronizationLogin:(UIButton *)btn{    NSMutableURLRequest *request = [self postLoginRequest];        // 注意此處使用了塊代碼!異步請求隊列使用的是操作隊列的主隊列    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {                        if([data length]>0 && connectionError==nil)        {            NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];            NSLog(@"異步成功返回的數據%@",string);        }        else if ([data length] <=0 && connectionError==nil)        {                        NSLog(@"沒有接收到返回數據");        }        else        {            NSLog(@"異步訪問錯誤%@",connectionError.localizedDescription);        }    }];}

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产99国产精品澳门| 亚洲免费视频在线观看| 欧美丰满片xxx777| 日韩成人激情影院| 亚洲最新av在线网站| 久久久久国产视频| 亚洲在线观看视频网站| 欧美另类高清videos| 欧美精品激情在线观看| 欧美午夜精品久久久久久浪潮| 日日骚av一区| wwwwwwww亚洲| 亚洲高清色综合| 亚洲欧美三级在线| 欧美成人全部免费| 亚洲国产精久久久久久久| 国产精品久久电影观看| 日韩电影中文字幕av| www.欧美精品一二三区| 欧美巨乳美女视频| 色婷婷久久一区二区| 国产成人av在线播放| 伊人久久久久久久久久久| 国产精品18久久久久久首页狼| 国产精品网址在线| 色哟哟亚洲精品一区二区| 91久久久久久久久久| 日韩精品中文字幕久久臀| 91精品国产亚洲| 久久久久久久久久久亚洲| 国产黑人绿帽在线第一区| 2020国产精品视频| 亚洲国产精品va在线观看黑人| 亚洲最大的免费| 美女啪啪无遮挡免费久久网站| 国产精品自产拍在线观看| 国产精品久久久久久婷婷天堂| 国产亚洲欧洲在线| 国产99视频在线观看| 国产精品自产拍在线观| 久久天天躁夜夜躁狠狠躁2022| 欧美日韩另类字幕中文| 深夜福利国产精品| 欧美另类高清videos| 国产日韩在线看片| 亚洲福利视频专区| 欧美激情小视频| 亚洲美女在线观看| 欧美多人爱爱视频网站| 久久激情视频久久| 日韩在线中文字幕| 精品久久久久久中文字幕大豆网| 欧美电影在线观看高清| 亚洲第一页中文字幕| 伊人久久免费视频| 久久久久久成人| 中文国产成人精品久久一| 97精品久久久| 国产成人在线一区二区| 国产精品一久久香蕉国产线看观看| 日韩精品中文字幕在线观看| 亚洲午夜精品久久久久久性色| 青青草国产精品一区二区| 国产精品第100页| 久久久爽爽爽美女图片| 欧美激情在线观看| 欧美极品少妇xxxxⅹ喷水| 欧美日韩国产丝袜另类| 亚洲国产私拍精品国模在线观看| 亚洲黄色免费三级| 国产精品久久久久久久久久免费| 欧美精品久久久久久久| 日韩精品视频免费在线观看| 亚洲有声小说3d| 日韩精品视频在线免费观看| 日韩激情视频在线播放| 亚洲国产日韩欧美在线图片| 国产亚洲福利一区| 国产精品女人久久久久久| 欧美激情视频在线| 久久国产精品久久久久久| 久久成人18免费网站| 日韩免费黄色av| 亚洲色图狂野欧美| 国产精品狠色婷| 精品久久久久久久久久| 一区二区亚洲欧洲国产日韩| 91精品国产高清久久久久久| 91在线视频成人| 欧美最猛性xxxxx亚洲精品| 日韩在线观看免费高清完整版| 国产欧美中文字幕| 成人精品一区二区三区| 一区二区三区精品99久久| 色视频www在线播放国产成人| 美女啪啪无遮挡免费久久网站| 久久亚洲私人国产精品va| 国产精品九九九| 国产日产欧美精品| 91美女片黄在线观看游戏| 欧美一区二区三区精品电影| 国产成人高清激情视频在线观看| 国产精品天天狠天天看| 国产一区二区日韩| 国产视频精品xxxx| 亚洲国产欧美在线成人app| 国产成人精品优优av| 久久精品久久久久电影| 亚洲一区二区自拍| 欧美日韩国产一区二区| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美电影免费观看电视剧大全| 亚洲天堂男人天堂女人天堂| 国产成人综合亚洲| 欧美另类精品xxxx孕妇| 国产精品久久久久久久一区探花| 国产精品自产拍在线观看| 精品一区电影国产| 亚洲国产一区自拍| 在线播放精品一区二区三区| 日韩精品在线免费| 国产精品日日做人人爱| 精品电影在线观看| 久久中文字幕国产| 久久久电影免费观看完整版| 91免费的视频在线播放| 亚洲国产日韩精品在线| 国产欧美日韩免费看aⅴ视频| 97视频在线观看成人| 欧美中文在线视频| 久久成人国产精品| 亚洲另类欧美自拍| 一区二区三区久久精品| 成人免费看吃奶视频网站| 国产婷婷色综合av蜜臀av| 国产成人免费91av在线| 亚洲毛片在线观看.| 亚洲美女在线视频| 国产精品久久久久久一区二区| 欧美专区在线播放| 欧美成人精品不卡视频在线观看| 日韩美女视频在线观看| 亚洲欧美国产va在线影院| 亚洲伊人一本大道中文字幕| 成人疯狂猛交xxx| 性欧美办公室18xxxxhd| 日韩中文在线观看| 疯狂蹂躏欧美一区二区精品| 国产一区二区免费| 欧美成人激情视频免费观看| 色老头一区二区三区| 欧美激情第99页| 欧美国产日韩一区| 欧美亚洲第一区| 欧美视频在线观看免费| 国产一区二区三区免费视频| 美女性感视频久久久| 日韩福利伦理影院免费| 97视频在线观看免费| 亚洲精品久久久久| 黑人巨大精品欧美一区二区三区| 欧美精品性视频| 欧美xxxx18国产| 亚洲精品久久久久久久久|