1. 程式人生 > >ios網絡學習------3 用非代理方法實現異步post請求

ios網絡學習------3 用非代理方法實現異步post請求

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請求