通过Get请求方式,异步获取网络数据,异步请求不会阻塞主线程(用户界面不会卡死),而会建立一个新的线程。

代码如下

ViewController.h文件

 1 //
 2 //  ViewController.h
 3 //  AppDemo
 4 //
 5 //  Created by JinXin on 15/12/2.
 6 //  Copyright © 2015年 xx. All rights reserved.
 7 //
 8
 9 #import <UIKit/UIKit.h>
10
11 // 1.添加一个协议代理
12 @interface ViewController : UIViewController<NSURLConnectionDataDelegate>
13
14 // 2.添加一个属性,用来接受网络数据。
15 @property(nonatomic) NSData *receiveData;
16
17 @end

ViewController.m文件

 1 //
 2 //  ViewController.m
 3 //  AppDemo
 4 //
 5 //  Created by JinXin on 15/12/2.
 6 //  Copyright © 2015年 xx. All rights reserved.
 7 //
 8
 9 #import "ViewController.h"
10
11
12 @interface ViewController ()
13
14 @end
15
16 @implementation ViewController
17
18 - (void)viewDidLoad {
19     [super viewDidLoad];
20     // Do any additional setup after loading the view, typically from a nib.
21
22     // 3.建立一个网址对象,指定请求数据的网址,本节调用Facebook的公用API,获取某个FB用户信息。
23     NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com/Apple-Inc"];
24     // 4.通过网址创建网络请求对象,
25     // 参数1:请求访问路径
26     // 参数2:缓存协议
27     // 参数3:网络请求超时时间
28     NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
29     // 5.使用网络对象实现网络通讯,网络请求对象创建成功后,就创建来一个网络连接。
30     NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
31
32
33 }
34
35 // 6.添加一个代理方法,当接受到网络反馈时,执行这个方法。
36 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
37 {
38     self.receiveData = [NSMutableData data];
39 }
40
41 // 7.添加一个代理方法,当接收到网络数据时,执行这个方法
42 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
43 {
44     self.receiveData = data;
45 }
46
47 // 8.添加一个代理方法,当网络连接的一系列动作结束后执行这个方法。
48 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
49 {
50     // 将接受到的网络数据,从二进制数据格式,转换为字符串格式,并输出结果
51     NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding ];
52     NSLog(@">>>>>>>>>>>>>>>>%@",receiveStr);
53 }
54
55 // 9.添加一个代理方法,当网络连接失败执行这个方法
56 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
57 {
58     NSLog(@">>>>>>>>>>>>>>>>%@",[error localizedDescription]);
59 }
60
61 - (void)didReceiveMemoryWarning {
62     [super didReceiveMemoryWarning];
63     // Dispose of any resources that can be recreated.
64 }
65
66
67
68 @end

执行之后就可以根据指定网址获取数据了。

转载于:https://www.cnblogs.com/-jpp/p/5018108.html

iOS 网络与多线程--3.异步Get方式的网络请求(非阻塞)相关推荐

  1. tornado异步请求非阻塞

    前言也许有同学很迷惑:tornado不是标榜异步非阻塞解决10K问题的嘛?但是我却发现不是torando不好,而是你用错了 比如最近发现一个事情:某网 前言 也许有同学很迷惑:tornado不是标榜异 ...

  2. 多线程-并发编程(7)-生产者消费者模式及非阻塞队列与阻塞队列实现

    生产者消费者模式是一个十分经典的多线程协作模式 弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻 存在3个元素 1.生产者(类比厨师) 2.生产者的生产产品(类比美食) 3.消费者(类比吃货) ...

  3. 【Python进阶学习】gRPC在Python的异步非阻塞实现方式

    gRPC在Python的异步非阻塞实现方式 前言 问题&分析 问题阐述 原因分析 解决方案 服务端 原服务端实现方式 aio的服务端实现方式: 客户端 异步非阻塞方式 同步阻塞方式 性能优化效 ...

  4. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  5. 异步非阻塞式数据传输——AIO的两种实现方式

    一 点睛 AIO 是自 JDK 1.7 开始提供,本质是对 NIO 中 Channel 进行的一些扩展,因此 AIO 也称为 NIO.2.具体地讲,AIO 就是在 NIO 的基础上,新增加了下表的 3 ...

  6. 彻底搞懂阻塞、非阻塞、同步、异步

    原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文 IO 概念区分: 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Bloc ...

  7. 阻塞与非阻塞、同步与异步、I/O模型

    1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端:  同步: 所谓同步,就是在c端 ...

  8. 高级 IO(非阻塞、多路复用、异步、存储映射、文件锁)

    目录 非阻塞I/O 阻塞I/O 与非阻塞I/O 读文件 阻塞I/O 的优点与缺点 使用非阻塞I/O实现并发读取 I/O 多路复用 何为I/O多路复用 select()函数 poll()函数 总结 异步 ...

  9. 同步/异步,阻塞/非阻塞概念深度解析

    ‍‍ 原文:https://blog.csdn.net/lengxiao1993/article/78154467 更新:极客重生 网络IO作为网络编程核心基础知识,是所以程序员都需要理解掌握的,最近 ...

  10. 同步阻塞与异步非阻塞

    syncBlocking & asyncNonblocking 转载:https://www.zhihu.com/question/19732473/answer/23434554 作者:严肃 ...

最新文章

  1. djongo:Django和MongoDB连接器
  2. python读取文件名存到list_python读取文件名称生成list的方法
  3. 11行Python代码,发现了室友U盘的惊天秘密。
  4. 3 .6 .5 优化Ad-Hoc工作负载
  5. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明
  6. 过程改进的疑惑 - 习惯能改么?
  7. 【论文写作】毕业论文中容易栽的九个坑
  8. SQL的「悲观锁定」与「乐观锁定」
  9. TableView载入WebView的一些小技巧 By 徐
  10. [2018.10.15 T3] 数列
  11. 基于安卓系统的服药监督系统(一)——可行性研究报告
  12. 修改Android应用名称
  13. vue打包时页面布局出现混乱
  14. Audio in Windows Vista
  15. 国防科技大学计算机考研资料汇总
  16. wps下载的简历无法删除空白页
  17. html设计的概念,HTML标签, 元素与列表,前端UI设计-2019.08.30
  18. B/S模式下的MVC架构迭代(2)
  19. MySQL设置白名单,允许单个IP或某段节点登录
  20. steam泰坦之旅dlc_泰坦之旅亚特兰迪斯DLC下载_亚特兰迪斯中文版下载_快吧单机游戏...

热门文章

  1. lamp rpm mysql_LAMP基于RPM包实现(httpd与php以module方式结合) 1
  2. vim无法写入hosts文件(提示hosts是一个只读文件)
  3. BZOJ 1801 中国象棋(DP)
  4. datagrid鼠标悬浮提示
  5. Android四大组件 之一 广播接收者
  6. JSTL不同版本和EL表达式的关联
  7. 网络人“时间都去哪儿了”
  8. ddtek.oracle.dll使用相关
  9. win7的配置要求详解
  10. python壁球小游戏——pygame之旅