iOS开发多线程篇—线程间的通信
Cocoa为iOS线程间通信提供2种方式,1种是performSelector,另1种是Port。
先说第1种,performSelector,有以下几种:
第2种为NSMachPort方式。NSPort有3个子类,NSSocketPort、NSMessagePort、NSMachPort,但在iOS下只有NSMachPort可用。
使用的方式为接收线程中注册NSMachPort,在另外的线程中使用此port发送消息,则被注册线程会收到相应消息,然后最终在主线程里调用某个回调函数。
可以看到,使用NSMachPort的结果为调用了其它线程的1个函数,而这正是performSelector所做的事情,所以,NSMachPort是个鸡肋。线程间通信应该都通过performSelector来搞定。
线程间通信的表现:
1个线程传递数据给另1个线程
在1个线程中执行完特定任务后,转到另1个线程继续执行任务
下面是一个下载图片的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
@interface BTThreadViewController () { UIImageView *imagev; } @end - ( void )viewDidLoad { [super viewDidLoad]; imagev = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:imagev]; //子线程里面调用downImage方法下载图片 [self performSelectorInBackground:@selector(downImage) withObject:nil]; } -( void )downImage { //从网络中下载图片 NSURL *url = [NSURL URLWithString:@ "http://i8.topit.me/8/c1/31/1142319854bdc31c18o.jpg" ]; //将图片转换为二进制数据 NSData *imgData = [NSData dataWithContentsOfURL:url]; //数据转换成图片 UIImage *img = [UIImage imageWithData:imgData]; //回到主线程设置图片 [self performSelectorOnMainThread:@selector(senderImage:) withObject:img waitUntilDone:NO]; } -( void )senderImage:(UIImage *)image { imagev.image = image; }
|
【推广】
免费学中医,健康全家人
原文地址:https://www.cnblogs.com/HypeCheng/p/4500597.html
- 推荐文章
- 8086 汇编环境搭建
- mysql 的索引
- mysql 的sql 语句
- 数据库主从+多实例
- mysql 多实例
- mysql的体系管理
- mysql 的二进制和源码包 安装的报错总结
- shell 之 数组
- shell 流程控制
- 三剑客
- shell 的概述
- [C++基本语法:从菜鸟变成大佬系列,就像1,2,3那么简单](六):C++的决策声明(判断)
- [C++基本语法:从菜鸟变成大佬系列,就像1,2,3那么简单](五):C++的输入输出
- [C++基本语法:从菜鸟变成大佬系列,就像1,2,3那么简单](四):C++的循环
- #P2341 [HAOI2006]受欢迎的牛 题解
- [C++基本语法:从菜鸟变成大佬系列,就像1,2,3那么简单](三):C++的定义变量
- [C++基本语法:从菜鸟变成大佬系列,就像1,2,3那么简单](二):C++的程序结构
- [C++基本语法:从菜鸟变成大佬系列,就像1,2,3那么简单](一):C++的概括
- #P1099 树网的核 题解
- P1120/UVA307 小木棍(sticks) 题解
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-策略设置
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-基本设置
- asp.net 微信企业号办公系统-流程设计-流程属性设置
- asp.net 微信企业号办公系统-表单设计-保存与发布
- asp.net 微信企业号办公系统-表单设计-数据表格
- asp.net 微信企业号办公系统-表单设计-子表
- asp.net 微信企业号办公系统-表单设计-附件管理
- asp.net 微信企业号办公系统-表单设计-日期时间选择
- asp.net 微信企业号办公系统-表单设计-组织机构选择
- asp.net 微信企业号办公系统-表单设计-数据字典选择