Get的同步以及异步

1.Get的同步请求

- (NSURLRequest *)getLoginRequest


{

    NSString *userName = _userName.text;

    NSString *password = [_password.text companyMD5];


    NSLog(@"%@", [_password.text MD5]);


    NSLog(@"%@", password);

    // 1. 网络地址URL


    NSString *urlString = [NSStringstringWithFormat:@"http://192.168.3.251/~apple/itcast/login.php?username=%@&password=%@", userName, password];


    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSURL *url = [NSURL URLWithString:urlString];

    // 2. 请求


    // 1> url


    // 2> 缓存策略


    // 3> 超时时长


    // 提示:因为网络的状态是未知的,因此要使用URLRequest一定要指定超时时长


    // 否则会严重影响用户体验!


    return [NSURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:2.0f];

15 
16 #pragma mark 同步登录请求
17 - (IBAction)syncLogin
18 {
19     // 1. 建立请求
20     NSURLRequest *request = [self getLoginRequest];
21     
22     // 在OC中,凡是看到__autoreleasing标示符的,表示参数需要传入地址,所谓地址就是添加“&”
23     NSURLResponse *response = nil;
24     NSError *error = nil;
25     
26     // 同步请求的应用场景:例如:网银账户的登录!
27     // 一定要获取到某个网络返回数据后,才能进行下一步操作的场景!
28     // 发送同步请求,respone&error要带地址的原因就是为了方法执行后,能够方便使用response&error
29     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
30     
31     // 提示,上面的网络同步请求不完成,下面一句话是不会执行到的!
32     if (data != nil) {
33         // 网络请求正常
34         
35         // 将data转换为字符串
36         NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
37         
38         [self showMessageWithResult:result];
39     } else if (data == nil && error == nil) {
40         // 网络返回空数据
41         NSLog(@"接收到空数据");
42     } else {
43         NSLog(@"%@", error.localizedDescription);
44     }
45 }

2.Get的异步登陆方法

 1 - (NSURLRequest *)getLoginRequest
 2 {
 3     NSString *userName = _userName.text;
 4     NSString *password = [_password.text companyMD5];
 5     NSLog(@"%@", [_password.text MD5]);
 6     NSLog(@"%@", password);
 7     
 8     // 1. 网络地址URL
 9     NSString *urlString = [NSString stringWithFormat:@"http://192.168.3.251/~apple/itcast/login.php?username=%@&password=%@", userName, password];
10     urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
11     
12     NSURL *url = [NSURL URLWithString:urlString];
13     
14     // 2. 请求
15     // 1> url
16     // 2> 缓存策略
17     // 3> 超时时长
18     // 提示:因为网络的状态是未知的,因此要使用URLRequest一定要指定超时时长
19     // 否则会严重影响用户体验!
20     return [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f];
21    
22 }
23 
24 
25 - (IBAction)asyncLogin
26 {
27     // 1. request
28     NSURLRequest *request = [self getLoginRequest];
29     
30     // 异步登录
31     // 后台耗时的任务,与界面无关的操作会放在后台线程中执行。
32     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
33     
34     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
35         // 块代码的内容会在网络访问后执行
36         // 块代码是预先定义好的代码片段,在满足某个条件时执行的。
37         NSLog(@"%@", [NSThread currentThread]);
38         
39         if (data != nil) {
40             // 网络请求正常
41             
42             // 将data转换为字符串
43             NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
44             
45             [[NSOperationQueue mainQueue] addOperationWithBlock:^{
46                 [self showMessageWithResult:result];
47             }];
48         } else if (data == nil && connectionError == nil) {
49             // 网络返回空数据
50             NSLog(@"接收到空数据");
51         } else {
52             NSLog(@"%@", connectionError.localizedDescription);
53         }
54     }];
55     
56     NSLog(@"come here");
57 }
原文地址:https://www.cnblogs.com/hkyangvip/p/3496686.html