一巡李、同步下載(交互不好抚笔,容易出現(xiàn)卡死現(xiàn)象,一般下載數(shù)據(jù)較小或有特定需求才使用)侨拦。 ?發(fā)送同步請求后,程序?qū)⑼V褂脩艚换シ觯钡椒?wù)器返回數(shù)據(jù)完成后狱从,才進(jìn)行下一步的操作。
步驟:
1.創(chuàng)建NSURL
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"];
2.通過URL創(chuàng)建NSURLRequest
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
cachePolicy 緩存協(xié)議是個枚舉類型:
NSURLRequestUseProtocolCachePolicy 基礎(chǔ)策略
NSURLRequestReloadIgnoringLocalCacheData 忽略本地緩存
NSURLRequestReturnCacheDataElseLoad 首先使用緩存叠纹,如果沒有本地緩存季研,才從原地址下載
NSURLRequestReturnCacheDataDontLoad 使用本地緩存,從不下載誉察,如果本地沒有緩存与涡,則請求失敗。此策略多用于離線操作
NSURLRequestReloadIgnoringLocalAndRemoteCacheData 無視任何的緩存策略持偏,無論是本地還是遠(yuǎn)程驼卖,總是從原地址重新下載
NSURLRequestReloadRevalidatingCacheData 如果本地緩存是有效的則不下載。其他任何情況都從原地址重新下載
3.建立網(wǎng)絡(luò)連接NSURLConnection鸿秆,同步請求數(shù)據(jù)
NSData *receivedData = (NSMutableData *)[NSURLConnection sendSynchronousRwquest:request returningResponse:&response error:&error];
以上三步后酌畜,就需要將receivedData進(jìn)行解析,一般是XML/JSON卿叽。
二桥胞、異步下載
步驟:
步驟前兩步和同步一樣恳守,在第三步接收數(shù)據(jù)的時候與它有差別,需要用四個網(wǎng)絡(luò)連接代理方法來實(shí)現(xiàn)贩虾。
1.創(chuàng)建NSURL
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com/"];
2.通過URL創(chuàng)建NSURLRequest
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15];
3.?建立網(wǎng)絡(luò)連接NSURLConnection催烘,并設(shè)置其代理
[NSURLConnection connetionWithRequest:request delegate:self];
需要實(shí)現(xiàn)的代理:
NSURLConnectionDataDelegate,NSURLConnectionDelegate
用到的4個代理方法:
//接收服務(wù)器回應(yīng)時這個方法被調(diào)用
- (void)connetion:(NSURLConnetion *)connection didReceiveResponse:(NSURLResponse *)response
{
//初始化receiveData,用于存放服務(wù)器給的數(shù)據(jù)
self.receivedData = [NSMutableData data];
}
//接收到服務(wù)器傳輸數(shù)據(jù)的時候調(diào)用缎罢,此方法根據(jù)數(shù)據(jù)大小會執(zhí)行若干次
- (void)connection:(NSURLConnection *)connetion didReceiveData:(NSData *)data
{
[self.receivedData appendData:data];
}
//數(shù)據(jù)傳完之后調(diào)用此方法
- (void)connetionDidFinishLoading:(NSURLConneciton *)connetion
{
//TODO 得到最終的receivedData
}
//網(wǎng)絡(luò)請求過程中伊群,出現(xiàn)任何錯誤,如斷網(wǎng)屁使,連接超時等在岂,會進(jìn)入此方法
- (void)connetion:(NSURLConnection *)connetion didFailWithError:(NSError *)error
{
NSLog(@"%d@", [error localizedDescription]);
}