iOS開發-NSURLConnection基本使用


一、NSURLConnection的常用類

(1)NSURL:請求地址

(2)NSURLRequest:封裝一個請求,保存發給服務器的全部數據,包括一個NSURL對象,請求方法、請求頭、請求體....

(3)NSMutableURLRequest:NSURLRequest的子類

(4)NSURLConnection:負責發送請求,建立客戶端和服務器的連接。發送NSURLRequest的數據給服務器,并收集來自服務器的響應數據


二、NSURLConnection的使用

使用NSURLConnection發送請求的步驟很簡單

(1)創建一個NSURL對象,設置請求路徑(設置請求路徑)

(2)傳入NSURL創建一個NSURLRequest對象,設置請求頭和請求體(創建請求對象)

(3)使用NSURLConnection發送NSURLRequest(發送請求)


2.代碼示例

(1)發送請求的三個步驟:

1.設置請求路徑

2.創建請求對象

3.發送請求

3.1發送同步請求(一直在等待服務器返回數據,這行代碼會卡住,如果服務器,沒有返回數據,那么在主線程UI會卡住不能繼續執行操作)有返回值

3.2發送異步請求:沒有返回值

說明:任何NSURLRequest默認都是get請求。

通過NSURLConnection訪問服務器,三步:

1.設置請求路徑? 創建一個URL:統一資源定位符

注意這里一定要加http協議

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];

2.創建請求對象

NSURLRequest *request = [NSURLRequest requestWithURL:url];

3.建立連接,發送請求

接收數據的代理方法

1.建立一個同步請求(如果數據大或者網速慢,請求事件過長,會造成主線程阻塞(卡死))

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

//NSUTF8StringEncoding將data編碼為當前語言環境下的語言

NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"----------------------%@", str);

NSLog(@"----------繼續執行----------");

//對于網絡請求分為同步和異步兩種,同步是指在請求結果返回之前,程序代碼會卡在請求處,之后的代碼不會被執行,異步是指在發送請求之后,一邊在子線程中接收返回數據,一邊執行之后的代碼,當返回數據接收完畢后,采用回調的方式通知主線程做處理。


2、建立一個異步請求

創建隊列(開啟一個新的線程)

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {

NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSLog(@"訪問網頁返回的數據 ------- %@", str);

dispatch_async(dispatch_get_main_queue(), ^{

[_web loadHTMLString:str baseURL:nil];

});

}];


3.使用代理

? ? [NSURLConnection connectionWithRequest:request delegate:self];

#pragma mark - NSURLConnectionDelegate,NSURLConnectionDataDelegate

當你接收到服務器的響應(連通了服務器)會調用,(服務器告訴客戶端,我這邊準備好了,可以給你返回數據了)

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

NSLog(@"---------響應");

//創建可變數據對象,用來接收拼接返回的數據

_buffer = [[NSMutableData alloc] init];

}

//當接收到服務器發送的數據時會調用,(可能會被調用多次,每次只會傳遞部分數據)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

NSLog(@"---------數據");

//使用創建的好的buffer對象接受拼接數據

[_buffer appendData:data];

}

當數據全部接收完畢的時候會調用

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

NSLog(@"---------結束");

NSString *str = [[NSString alloc] initWithData:_buffer encoding:NSUTF8StringEncoding];

//#pragma unused(str)

}

請求失敗調用(請求超時,斷網,參數錯誤,服務器出錯.....)

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)erro {

NSLog(@"請求失敗");

}


NSURLConnection的常用類

(1)NSURL:請求路徑? -- 統一資源定位符

(2)NSURLRequest:請求對象,保存發給服務器的全部數據,包括一個NSURL對象,請求方法、請求頭、請求體....

(3)NSMutableURLRequest:NSURLRequest的子類

(4)NSURLConnection:負責發送請求,建立客戶端和服務器的連接。發送NSURLRequest的數據給服務器,并收集來自服務器的響應數據


3.1發送同步請求(一直在等待服務器返回數據,這行代碼會卡住,如果服務器,沒有返回數據,那么在主線程UI會卡住不能繼續執行操作)有返回值

3.2發送異步請求:沒有返回值

(3)發送異步請求??? 發送異步請求有兩種方式:

1)使用block回調

2)代理???? (例子見下面小Demo)


三、NSMutableURLRequest

NSMutableURLRequest是NSURLRequest的子類,常用方法有

設置請求超時等待時間(超過這個時間就算超時,請求失敗)- (void)setTimeoutInterval:(NSTimeInterval)seconds;

設置請求方法(比如GET和POST)- (void)setHTTPMethod:(NSString *)method;

設置請求體- (void)setHTTPBody:(NSData *)data;

設置請求頭- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

1.使用block的方式進行異步請求

使用如下代碼進行block方式的異步請求,在block中會傳入請求到的返回數據和數據信息等參數:

NSURL* url = [NSURLURLWithString:@"http://www.baidu.com"];

NSURLRequest* request = [NSURLRequestrequestWithURL:url];

//其中的queue參數決定block中的代碼在哪個隊列中執行[NSURLConnectionsendAsynchronousRequest:request queue:[NSOperationQueuemainQueue] completionHandler:^(NSURLResponse* _Nullable response,NSData* _Nullable data,NSError* _Nullable connectionError)

{NSLog(@"%@",data);??

}];

NSLog(@"繼續執行");

2.使用代理回調的異步請求方式

首先遵守協議與生命一個可變的NSData用于接收數據:

@interfaceViewController (){? ?

NSMutableData * _data;

}

@end

使用如下的代碼進行請求:


_data = [[NSMutableDataalloc]init];NSURL* url = [NSURLURLWithString:@"http://www.baidu.com"];NSURLRequest* request = [NSURLRequestrequestWithURL:url];? ? [NSURLConnectionconnectionWithRequest:request delegate:self];

請求發出后,會一次調用如下代理方法進行請求過程的監聽和數據的獲取:

-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response{

//開始接收數據[_data setLength:0];

}

-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data{

//正在接收數據[_data appendData:data];

}

-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error{

//接收數據失敗NSLog(@"%@",error);

}

-(void)connectionDidFinishLoading:(NSURLConnection*)connection{

//接收數據完成NSLog(@"%@",_data);

}


本文能更新的的就這些了,都是一些基礎的代碼案例


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,860評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,025評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,421評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,642評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,177評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,970評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,157評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,410評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,896評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,157評論 2 375

推薦閱讀更多精彩內容