你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS學習筆記——同步請求下載與異步請求下載

iOS學習筆記——同步請求下載與異步請求下載

編輯:IOS開發綜合

1.同步請求下載

同步請求與用戶的交互不太好,容易出現卡頓的現象,一般不使用。發送請求後等待服務器的響應,返回數據後進行下一步的操作。

創建一個空白視圖,在AppDelegate.m文件中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)lanuchOptions方法中添加如下代碼:

 //-----同步請求下載
 //獲取網絡資源路徑(URL)
 NSURL * pURL = [NSURL URLWithString:@"http://www.baidu.com"];
 //創建一個請求
 NSURLRequest * pRequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
 //建立連接
 NSURLResponse * pResponse = nil;
 NSError * pError = nil;
 //向服務器發起請求(發出後線程就會一直等待服務器響應,知道超出最大響應事件),獲取數據後,轉換為NSData類型數據
 NSData * pData = [NSURLConnection sendSynchronousRequest:pRequest returningResponse:&pResponse error:&pError];
 //輸出數據,查看,??後期還可以解析數據
 NSLog(@"pData = %@",pData);
 NSLog(@"pError = %@",[pError localizedDescription]);
2.異步請求下載

異步輕騎支持應用程序在後台下載數據,在等待下砸完成的過程中不影響用戶的其他操作。異步請求需要實現NSURLConnectionDataDelegate協議,實現其中的方法。同時需要創建一個可變的NSMutableData類型對象,存儲下載得到的數據。

在.h文件裡,遵循協議,創建存儲數據的對象,代碼如下:

@interface LinAppDelegate : UIResponder 

@property (retain, nonatomic) NSMutableData * pData;

@property (strong, nonatomic) UIWindow *window;

@end
一定要記得釋放創建的對象。

在.h文件裡,實現協議的方法,完成異步請求數據的存儲,代碼如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.window.backgroundColor = [UIColor whiteColor];
    
    //-----異步請求
    //獲取網絡資源路徑(URL)
    NSURL * pURL = [NSURL URLWithString:@"hppt://www.baidu.com"];
    //根據URL創建請求
    NSURLRequest * pRequest = [NSURLRequest requestWithURL:pURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
    //發起請求,通過委托模式回調完成數據獲取
    [NSURLConnection connectionWithRequest:pRequest delegate:self];    
    
    [self.window makeKeyAndVisible];
    return YES;
}
#pragma mark-----NSURLConnectionDataDelegate
//服務器響應回調的方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSLog(@"服務器響應!");
    //初始化,創建內存空間
    self.pData = [NSMutableData dataWithCapacity:5000];
}
//服務器返回數據,客戶端開始接受(data為返回的數據)
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSLog(@"服務器返回數據!");
    //將返回數據放入緩存
    [self.pData appendData:data];
}
//數據接受完畢回調的方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"數據接收完畢!");
    //輸出接受到的數據
    NSLog(@"pData = %@",self.pData);
}
//接受數據失敗的時候調用的方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"數據接受失敗,失敗的原因:%@",[error localizedDescription]);
}



  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved