實例:請求隊列
創(chuàng)新互聯(lián)公司提供高防主機、云服務器、香港服務器、成都服務器托管等
我們通過一個例子介紹一下請求隊列使用,我們設計了一個應用,用戶點擊GO按鈕從服務器同時下載兩張圖片顯示在畫面中。

我們直接看看主視圖控制器ViewController.h代碼如下:
- #import “ASIHTTPRequest.h”
- #import “ASINetworkQueue.h”
- #import “NSNumber+Message.h”
- #import “NSString+URLEncoding.h”
- @interface ViewController : UIViewController
- @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpathView1;
- @property (weak, nonatomic) IBOutlet UIImageView *p_w_picpathView2;
- @property (strong) ASINetworkQueue *networkQueue;
- - (IBAction)onClick:(id)sender;
- @end
我 們需要引入ASI框架的兩個頭文件ASIHTTPRequest.h和ASINetworkQueue.h。其中p_w_picpathView1和 p_w_picpathView2是與畫面對應的兩個圖片視圖控件。還定義了ASINetworkQueue 類型的networkQueue屬性。我們直接看看主視圖控制器ViewController.m中點擊GO按鈕調用方法,代碼如下:
- - (IBAction)onClick:(id)sender {
- if (!_networkQueue) {
- _networkQueue = [[ASINetworkQueue alloc] init]; ①
- }
- // 停止以前的隊列
- [_networkQueue cancelAllOperations]; ②
- // 創(chuàng)建ASI隊列
- [_networkQueue setDelegate:self];
- [_networkQueue setRequestDidFinishSelector:@selector(requestFinished:)]; ③
- [_networkQueue setRequestDidFailSelector:@selector(requestFailed:)]; ④
- [_networkQueue setQueueDidFinishSelector:@selector(queueFinished:)]; ⑤
- for (int i=1; i<3; i++) {
- NSString *strURL = [[NSString alloc] initWithFormat:
- @”http://iosbook3/download.php?email=%@&FileName=test%i.jpg”,
- @”<你的iosbook1.com用戶郵箱>”,i];
- NSURL *url = [NSURL URLWithString:[strURL URLEncodedString]];
- ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
- request.tag = i; ⑥
- [_networkQueue addOperation:request]; ⑦
- }
- [_networkQueue go]; ⑧
- }
我們再看看它們的回調方法,代碼:
- - (void)requestFinished:(ASIHTTPRequest *)request
- {
- NSData *data = [request responseData];
- NSError *eror;
- NSDictionary *resDict = [NSJSONSerialization JSONObjectWithData:data
- options:NSJSONReadingAllowFragments error:&eror];
- if (!resDict) {
- UIImage *img = [UIImage p_w_picpathWithData:data];
- if (request.tag ==1) { ①
- _p_w_picpathView1.p_w_picpath = img;
- } else {
- _p_w_picpathView2.p_w_picpath = img;
- }
- } else {
- NSNumber *resultCodeObj = [resDict objectForKey:@"ResultCode"];
- NSString *errorStr = [resultCodeObj errorMessage];
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@”錯誤信息”
- message:errorStr
- delegate:nil
- cancelButtonTitle:@”OK”
- otherButtonTitles: nil];
- [alertView show];
- }
- if ([_networkQueue requestsCount] == 0) { ②
- [self setNetworkQueue:nil];
- }
- NSLog(@”請求成功”);
- }
- - (void)requestFailed:(ASIHTTPRequest *)request ③
- {
- NSError *error = [request error];
- NSLog(@”%@”,[error localizedDescription]);
- if ([_networkQueue requestsCount] == 0) {
- [self setNetworkQueue:nil];
- }
- NSLog(@”請求失敗”);
- }
- - (void)queueFinished:(ASIHTTPRequest *)request ④
- {
- if ([_networkQueue requestsCount] == 0) {
- [self setNetworkQueue:nil];
- }
- NSLog(@”隊列完成”);
- }
requestFinished: 方法是請求對象成功回調方法,因此有兩個請求對象它會被調用兩次,在第①行代碼中我們根據(jù)GO按鈕點擊事件設定的 請求對象的tag屬性,來判斷是哪個請求對象的回調。進而加載到顯示不同的圖片視圖。第②代碼[_networkQueue requestsCount]可以判斷隊列中請求對象的個數(shù)。
分享題目:iOS網(wǎng)絡編程-ASIHTTPRequest小例子-數(shù)據(jù)請求隊列
網(wǎng)站鏈接:http://chinadenli.net/article10/jiggdo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、定制網(wǎng)站、搜索引擎優(yōu)化、手機網(wǎng)站建設、移動網(wǎng)站建設、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)