IOS之同步請求、異步請求、GET請求、POST請求
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!