ios網絡開發 同步下載和異步下載

jopen 9年前發布 | 2K 次閱讀 Objective-C IOS

一、同步下載(交互不好,容易出現卡死現象,一般下載數據較小或有特定需求才使用)。  發送同步請求后,程序將停止用戶交互,直到服務器返回數據完成后,才進行下一步的操作。

  步驟:

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]); 

} 


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