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