IOS之同步請求、異步請求、GET請求、POST請求

jopen 10年前發布 | 80K 次閱讀 iOS開發 移動開發 IOS

1、同步請求可以從因特網請求數據,一旦發送同步請求,程序將停止用戶交互,直至服務器返回數據完成,才可以進行下一步操作,

2、異步請求不會阻塞主線程,而會建立一個新的線程來操作,用戶發出異步請求后,依然可以對UI進行操作,程序可以繼續運行

3、GET請求,將參數直接寫在訪問路徑上。操作簡單,不過容易被外界看到,安全性不高,地址最多255字節;

4、POST請求,將參數放到body里面。POST請求操作相對復雜,需要將參數和地址分開,不過安全性高,參數放在body里面,不易被捕獲。

5、同步和異步的區別在于連接方式不同:

 同步用: 

 NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:Nil error:nil];

異步用:

 NSURLConnection * connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];(需要在.h中指定代理)

6、同步GET請求

//第一步,創建URL  
    NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"];  
    //第二步,通過URL創建request請求  
    NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];  
        //NSURLRequest初始化方法第一個參數:請求訪問路徑,第二個參數:緩存協議,第三個參數:網絡請求超時時間(秒)  

        //  其中緩存協議是個枚舉類型包含:  
        //  
        //  NSURLRequestUseProtocolCachePolicy(基礎策略)  
        //  
        //  NSURLRequestReloadIgnoringLocalCacheData(忽略本地緩存)  
        //  
        //  NSURLRequestReturnCacheDataElseLoad(首先使用緩存,如果沒有本地緩存,才從原地址下載)  
        //  
        //  NSURLRequestReturnCacheDataDontLoad(使用本地緩存,從不下載,如果本地沒有緩存,則請求失敗,此策略多用于離線操作)  
        //  
        //  NSURLRequestReloadIgnoringLocalAndRemoteCacheData(無視任何緩存策略,無論是本地的還是遠程的,總是從原地址重新下載)  
        //  
        //  NSURLRequestReloadRevalidatingCacheData(如果本地緩存是有效的則不下載,其他任何情況都從原地址重新下載)  
    //第三步,連接服務器  
    NSURLResponse * respones = nil;  
    NSError * error = nil;  
    NSData * reviced = [NSURLConnection sendSynchronousRequest:request returningResponse:&respones  error:&error];  
    //第四步,將數據轉換成圖片  
    UIImage * image = [[UIImage alloc]initWithData:reviced];  
    _imageView.image = image;

7.異步GET請求
    //第一步,創建URL  
        NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720ed8bdbef079cb0a46f21fab4d.jpg"];  
        //第二步,通過URL創建request請求  
        NSURLRequest * request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:15];  
        //第三步,連接服務器  
        [NSURLConnection connectionWithRequest:request delegate:self];//(需要在.h中指定代理方法)  
    //接受到服務器的回應調用  
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  
    {  
        [self.reviceData setLength:0 ];  

    }  
    //數據傳輸中一直調用  
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  
    {  
        [self.reviceData appendData:data];  

    }  
    //數據傳輸完才會調用  
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection  
    {  
        UIImage * image = [[UIImage alloc]initWithData:self.reviceData];  
        _imageView.image = image;  

    }  
8、同步POST請求
    //第一步,創建URL  
        NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"];  
    //第二步,通過URL創建可變的request請求(只有創建可變的request才能設置POST請求)  
        NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100];  
        //timeoutInterval:post超時最大時間是240秒,在方法中設置多少秒也沒用。  

    //第三步,設置POST請求方式  
        [request1 setHTTPMethod:@"POST"];  
    //第四步,設置參數  
        NSString * bodyStr = @"type=focus-c";  
        NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];  
        [request1 setHTTPBody:body];  
    //第五步,連接服務器  
        NSData * data = [NSURLConnection sendSynchronousRequest:request1 returningResponse:nil error:nil];  
        NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];  
        NSLog(@"%@",str);  
9、異步POST請求
    //第一步,創建URL  
        NSURL * url = [[NSURL alloc]initWithString:@"http://api.hudong.com/iphonexml.do"];  
    //第二步,通過URL創建可變的request請求(只有創建可變的request才能設置POST請求)  
        NSMutableURLRequest * request1 = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:100];  
        //timeoutInterval:post超時最大時間是240秒,在方法中設置多少秒也沒用。  

    //第三步,設置POST請求方式  
        [request1 setHTTPMethod:@"POST"];  
    //第四步,設置參數  
        NSString * bodyStr = @"type=focus-c";  
        NSData * body = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];  
        [request1 setHTTPBody:body];  
    //第五步,連接服務器  
    [[NSURLConnection alloc]initWithRequest:request2 delegate:self]  

    //接受到服務器的回應調用  
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response  
    {  
        [self.reviceData setLength:0 ];  

    }  
    //數據傳輸中一直調用  
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data  
    {  
        [self.reviceData appendData:data];  

    }  
    //數據傳輸完才會調用  
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection  
    {  
        NSString * str = [[NSString alloc]initWithData:self.reviceData encoding:NSUTF8StringEncoding];  
        NSLog(@"%@",str);  
    }  
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!