ios網路開發 同步下載和非同步下載

來源:互聯網
上載者:User

一、同步下載(互動不好,容易出現卡死現象,一般下載資料較小或有特定需求才使用)。  發送同步請求後,程式將停止使用者互動,直到伺服器返回資料完成後,才進行下一步的操作。

  步驟:

1.建立NSURL

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

 

2.通過URL建立NSURLRequest

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15]; 

 

    cachePolicy 緩衝協議是個枚舉類型:

 NSURLRequestUseProtocolCachePolicy 基礎策略


NSURLRequestReloadIgnoringLocalCacheData 忽略本機快取

 NSURLRequestReturnCacheDataElseLoad 首先使用緩衝,如果沒有本機快取,才從原地址下載


NSURLRequestReturnCacheDataDontLoad 使用本機快取,從不下載,如果本地沒有緩衝,則請求失敗。此策略多用於離線操作


NSURLRequestReloadIgnoringLocalAndRemoteCacheData 無視任何的緩衝策略,無論是本地還是遠程,總是從原地址重新下載


NSURLRequestReloadRevalidatingCacheData 如果本機快取是有效則不下載。其他任何情況都從原地址重新下載

 

 

3.建立網路連接NSURLConnection,同步請求資料 

  NSData *receivedData = (NSMutableData *)[NSURLConnection sendSynchronousRwquest:request returningResponse:&response error:&error];

 

 以上三步後,就需要將receivedData進行解析,一般是XML/JSON。 

 

二、非同步下載

 

    步驟: 

步驟前兩步和同步一樣,在第三步接收資料的時候與它有差別,需要用四個網路連接代理方法來實現。

        1.建立NSURL

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

 

2.通過URL建立NSURLRequest

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15]; 

 

3. 建立網路連接NSURLConnection,並設定其代理

[NSURLConnection connetionWithRequest:request delegate:self];

需要實現的代理:

NSURLConnectionDataDelegate,NSURLConnectionDelegate

 用到的4個代理方法:

 

//接收伺服器回應時這個方法被調用 

- (void)connetion:(NSURLConnetion *)connection didReceiveResponse:(NSURLResponse *)response 

{  

//初始化receiveData,用於存放伺服器給的資料 

self.receivedData = [NSMutableData data]; 

 

//接收到伺服器傳輸資料的時候調用,此方法根據資料大小會執行若干次

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

{

[self.receivedData appendData:data]; 

 }

 

//資料傳完之後調用此方法

- (void)connetionDidFinishLoading:(NSURLConneciton *)connetion 

{

//TODO 得到最終的receivedData 



 

//網路請求過程中,出現任何錯誤,如斷網,連線逾時等,會進入此方法

 - (void)connetion:(NSURLConnection *)connetion didFailWithError:(NSError *)error

 {

NSLog(@"%d@", [error localizedDescription]); 


 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.