ios網絡學習------3 用非代理方法實現異步post請求
阿新 • • 發佈:2017-06-02
erro form b2c enc 界面 關聯 error pre mut
#pragma mark - 這是私有方法。盡量不要再方法中直接使用屬性,由於一般來說屬性都是和界面關聯的,我們能夠通過參數的方式來使用屬性 #pragma mark post登錄方法 -(void)loginWithPostWithName:(NSString *)userName pwd:(NSString *)pwd { //1確定地址NSURL NSString *urlString = [NSString stringWithFormat:@"www.baidu.com"]; NSURL *url = [NSURL URLWithString:urlString]; //2建立請求NSMutableURLRequest(post須要用這個) NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //網絡訪問超時時間 [request setTimeoutInterval:2.0f]; //1)post請求方式,網絡請求默認是get方法,所以假設我們用post請求,必須聲明請求方式。 [request setHTTPMethod:@"POST"]; //2)post請求的數據體,post請求中數據體時,假設有中文,不須要轉換。由於ataUsingEncoding方法已經實現了轉碼。 NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", userName, pwd]; //將nstring轉換成nsdata NSData *body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding]; NSLog(@"body data %@", body); [request setHTTPBody:body]; //這裏是非代理的異步請求,異步請求並不會阻止主線程的繼續運行,不用等待網絡請結束。 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError * error) { //這段塊代碼僅僅有在網絡請求結束以後的興許處理。 if (data != nil) { //接受到數據,表示工作正常 NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@", str); }else if(data == nil && error != nil) //沒有接受到數據,可是error為nil。。表示接受到空數據。 { NSLog(@"接受到空數據"); }else{ NSLog(@"%@", error.localizedDescription); //請求出錯。
} }];
同步方法用在最典型的地方時用戶登錄的時候:用戶必須登錄進去才運行其他操作。
異步方法是網絡請求完畢以後,再更新頁面等等。
用代理方式或者非代理方式的唯一差別是在網絡請求的第三部,就是nsurlconnecttion中。
。。其他都是一樣的,,。一個是通過代理來實現。一個是通過nsurlconnection的兩個類方法來實現。其他都是一樣的。
NSURLRequest的緩存策略:
//2建立請求NSURLRequest //緩存側虐 //超時時長 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];用緩存策略的優點是一進入應用就能夠進入頁面,即使沒有聯網。普通情況下用默認緩存就能夠了。
這些緩存是緩存到內存中,假設須要保存下來,還須要興許處理。
ios網絡學習------3 用非代理方法實現異步post請求