小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

iOS開發(fā)中的網(wǎng)絡(luò)請(qǐng)求

 Han_Count 2015-11-26

今天來說說關(guān)于iOS開發(fā)過程中的網(wǎng)絡(luò)請(qǐng)求。

關(guān)于網(wǎng)絡(luò)請(qǐng)求的重要性我想不用多說了吧。對(duì)于移動(dòng)客戶端來說,網(wǎng)絡(luò)的重要性不言而喻。常見的網(wǎng)絡(luò)請(qǐng)求有同步GET, 同步POST, 異步GET, 異步POST。今天來看一下四種網(wǎng)絡(luò)請(qǐng)求的實(shí)現(xiàn)方式。

一、同步GET

// 1.將網(wǎng)址初始化成一個(gè)OC字符串對(duì)象
NSString *urlStr = [NSString stringWithFormat:@"%@?query=%@?ion=%@&output=json&ak=6E823f587c95f0148c19993539b99295", kBusinessInfoURL, @"銀行", @"濟(jì)南"];
// 如果網(wǎng)址中存在中文,進(jìn)行URLEncode
NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 2.構(gòu)建網(wǎng)絡(luò)URL對(duì)象, NSURL
NSURL *url = [NSURL URLWithString:newUrlStr];
// 3.創(chuàng)建網(wǎng)絡(luò)請(qǐng)求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
// 創(chuàng)建同步鏈接
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

當(dāng)創(chuàng)建好同步鏈接以后, 就可以采用相應(yīng)的方法進(jìn)行解析。下面創(chuàng)建異步連接也是一樣的。

二、同步POST

// 1.根據(jù)網(wǎng)址初始化OC字符串對(duì)象
    NSString *urlStr = [NSString stringWithFormat:@"%@", kVideoURL];
    // 2.創(chuàng)建NSURL對(duì)象
    NSURL *url = [NSURL URLWithString:urlStr];
    // 3.創(chuàng)建請(qǐng)求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    // 4.創(chuàng)建參數(shù)字符串對(duì)象
    NSString *parmStr = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";
    // 5.將字符串轉(zhuǎn)為NSData對(duì)象
    NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
    // 6.設(shè)置請(qǐng)求體
    [request setHTTPBody:pramData];
    // 7.設(shè)置請(qǐng)求方式
    [request setHTTPMethod:@"POST"];
    
    // 創(chuàng)建同步鏈接
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

三、異步GET

    NSString *urlStr = [NSString stringWithFormat:@"http://image.zcool.com.cn/56/13/1308200901454.jpg"];
    NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:newStr];
    NSURLRequest *requst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
    //異步鏈接(形式1,較少用)
    [NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        self.imageView.image = [UIImage imageWithData:data];
        // 解析
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        NSLog(@"%@", dic);
    }];

四、異步POST

// POST請(qǐng)求
    NSString *urlString = [NSString stringWithFormat:@"%@",kVideoURL];
    //創(chuàng)建url對(duì)象
    NSURL *url = [NSURL URLWithString:urlString];
    //創(chuàng)建請(qǐng)求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
    //創(chuàng)建參數(shù)字符串對(duì)象
    NSString *parmStr = [NSString stringWithFormat:@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];
    //將字符串轉(zhuǎn)換為NSData對(duì)象
    NSData *data = [parmStr dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:data];
    [request setHTTPMethod:@"POST"];
    //創(chuàng)建異步連接(形式二)
    [NSURLConnection connectionWithRequest:request delegate:self];

一般的,當(dāng)創(chuàng)建異步連接時(shí), 很少用到第一種方式,經(jīng)常使用的是代理方法。關(guān)于NSURLConnectionDataDelegate,我們經(jīng)常使用的協(xié)議方法為一下幾個(gè):

// 服務(wù)器接收到請(qǐng)求時(shí)
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
}
// 當(dāng)收到服務(wù)器返回的數(shù)據(jù)時(shí)觸發(fā), 返回的可能是資源片段
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
}
// 當(dāng)服務(wù)器返回所有數(shù)據(jù)時(shí)觸發(fā), 數(shù)據(jù)返回完畢
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
}
// 請(qǐng)求數(shù)據(jù)失敗時(shí)觸發(fā)
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"%s", __FUNCTION__);
}

最后,分析一下這幾種呢網(wǎng)絡(luò)請(qǐng)求的區(qū)別。

GET請(qǐng)求和POST請(qǐng)求的區(qū)別:

1. GET請(qǐng)求的接口會(huì)包含參數(shù)部分,參數(shù)會(huì)作為網(wǎng)址的一部分,服務(wù)器地址與參數(shù)之間通過 ? 來間隔。POST請(qǐng)求會(huì)將服務(wù)器地址與參數(shù)分開,請(qǐng)求接口中只有服務(wù)器地址,而參數(shù)會(huì)作為請(qǐng)求的一部分,提交后臺(tái)服務(wù)器。

2. GET請(qǐng)求參數(shù)會(huì)出現(xiàn)在接口中,不安全。而POST請(qǐng)求相對(duì)安全。

3.雖然GET請(qǐng)求和POST請(qǐng)求都可以用來請(qǐng)求和提交數(shù)據(jù),但是一般的GET多用于從后臺(tái)請(qǐng)求數(shù)據(jù),POST多用于向后臺(tái)提交數(shù)據(jù)。

同步和異步的區(qū)別:

同步鏈接:主線程去請(qǐng)求數(shù)據(jù),當(dāng)數(shù)據(jù)請(qǐng)求完畢之前,其他線程一律不響應(yīng),會(huì)造成程序就假死現(xiàn)象。

異步鏈接:會(huì)單獨(dú)開一個(gè)線程去處理網(wǎng)絡(luò)請(qǐng)求,主線程依然處于可交互狀態(tài),程序運(yùn)行流暢。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多