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