你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> iOS網絡編程

iOS網絡編程

編輯:IOS技巧綜合
[摘要]本文是對iOS網絡編程--NSConnection的同步連接與異步連接的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。
 //
 //  ZFViewController.m
 //  0628-表單驗證
 //
 //
 
 #import "ZFViewController.h"
 #import "MBProgressHUD+MJ.h"
 
 @interface ZFViewController ()
 
 @property (weak, nonatomic) IBOutlet UITextField *userNameTextField;
 @property (weak, nonatomic) IBOutlet UITextField *passWordTextField;
 
 @end
 
 @implementation ZFViewController
 
 - (void)viewDidLoad
 {
     [super viewDidLoad];
 }
 
 - (IBAction)login:(id)sender
 {
     //驗證賬號和密碼是否合法
     if (self.userNameTextField.text.length == 0)
     {
         [MBProgressHUD showError:@"請輸入賬號"];
         return;
     }
     
     if (self.passWordTextField.text.length == 0)
     {
         [MBProgressHUD showError:@"請輸入密碼"];
         return;
     }
     
     //取出賬號和密碼
     NSString *userName = self.userNameTextField.text;
     NSString *password = self.passWordTextField.text;
     
     //生成URL
     NSString *urlPath = [NSString stringWithFormat:@"http://192.168.1.101:8080/ZFServer/login?username=%@&pwd=%@", userName, password];
     NSURL *url = [NSURL URLWithString:urlPath];
     
     //生成連接
     NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
     
     //建立連接並接收返回數據(同步執行)
 //    NSData *loginData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];
     
     
     //建立連接並接收返回數據(異步執行)
     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
     [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
         NSData *loginData = data;
         NSLog(@"%ld", (unsigned long)loginData.length);
     }];
     
     //打印返回的數據長度
     NSLog(@"%@", self.userNameTextField.text);
     NSLog(@"%@", self.passWordTextField.text);
 //    NSLog(@"%ld", (unsigned long)loginData.length);
 }
 
 @end

知識要點:

1>通過NSString類方法拼接字符串,生成完整的URL路徑;

2>通過NSURLRequest的類方法,利用URL建立一個NSURLRequest連接實例;

3>通過NSConnection的類方法建立連接並接受返回數據,可通過同步方式和異步方式實現:

  3.1>同步方式

[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:nil error:nil];

  此方法不會新建線程,返回值為NSData,由於未新建線程,因此在該方法未完成前,線程不會繼續向下運行,容易造成卡死;

  3.2>異步方式

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
  NSData *loginData = data;
  NSLog(@"%ld", (unsigned long)loginData.length);
}];

  此方法會建立一個新的線程用於接受網絡端返回數據,返回值為void,當數據接受完畢後會執行block中的語句;

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