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]); }