OS开发多线程篇—线程间的通信

iosblog‘s

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;

}

 

分类: iOS开发多线程篇

绿色通道: 好文要顶 关注我 收藏该文与我联系 

iosblog‘s
关注 - 1
粉丝 - 0

+加关注

0

0

(请您对文章做出评价)

«上一篇:iOS开发多线程篇—线程安全 - 文顶顶
»下一篇:iOS开发多线程篇—GCD介绍 - 文顶顶

posted on 2015-05-03 19:08 iosblog‘s 阅读(7) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部

发表评论

昵称:

评论内容:

     

注销 订阅评论

[使用Ctrl+Enter键快速提交]

【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
融云,免费为你的App加入IM功能——让你的App“聊”起来!!

最新IT新闻:
· 聘用老程序员的4大原因
· 和阿里云成立合资企业的迪拜企业Meraas是什么来头?
· 国际空间站的迷你电脑长啥样?能运行多系统长得还挺漂亮
· Ubuntu进军物联网
· 联通举办5·17网购节 存1元送240元话费
» 更多新闻...

最新知识库文章:

· 说说领域驱动设计和贫血、失血、充血模型
· 贫血,充血模型的解释以及一些经验
· 如何避免软件工程中最昂贵错误的发生
· 面向服务体系和遗留系统
· 运维的本质——可视化

» 更多知识库文章...

Powered by: 
博客园 
Copyright © iosblog‘s

< 2015年5月 >
26 27 28 29 30 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 1 2 3 4 5 6

导航

统计

  • 随笔 - 111
  • 文章 - 2
  • 评论 - 0
  • 引用 - 0

公告

昵称:iosblog‘s
园龄:14天
粉丝:0
关注:1

+加关注

搜索

常用链接

随笔分类

随笔档案

阅读排行榜

时间: 2024-08-28 09:04:10

OS开发多线程篇—线程间的通信的相关文章

iOS开发多线程篇—线程间的通信

iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SE

iOS开发多线程篇—线程间的通信(转)

这里转载 给自己一个备份 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SEL)aS

iOS开发多线程篇---线程间的通信

线程间通信的表现: 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 下面是一个下载图片的例子: @interface BTThreadViewController () {     UIImageView *imagev; } @end - (void)viewDidLoad {     [super viewDidLoad];          imagev = [[UIImageView alloc] initWithFrame:CGRectMake(

iOS多线程技术—线程间的通信

iOS开发多线程篇—线程间的通信 一.简单说明 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 线程间通信常用方法 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)performSelector:(SE

iOS多线程开发小demo5 线程间的通信

// DYFViewController.m // 623-06-线程间的通信 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImag

iOS开发多线程篇—线程的状态

iOS开发多线程篇—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 说明:创建线程有多种方式,这里不做过多的介绍. 线程的开启: [self.thread start]; 线程的运行和阻塞: (1)设置线程阻塞1,阻塞2秒 [NSThread sleepForTimeInterval:2.0]; (2)第二种设置线程阻塞2,以当前时

iOS开发多线程篇—线程安全 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3805841.html iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1 块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 示例一: 示例二: 问题代码: 1 // 2 // YYViewController.m 3 // 05-线程安全 4 // 5 // Create

iOS开发多线程篇—线程的状态 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3807184.html iOS开发多线程篇-线程的状态 一.简单介绍 线程的 创建 : self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 说明:创建线程有多种方式,这里不做过多的介绍. 线程的 开启 : [self.thread start]; 线程的 运行 和 阻塞 : (1)设置线程阻塞

iOS开发多线程篇—线程安全

iOS开发多线程篇—线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 示例一: 示例二: 问题代码: 1 // 2 // YYViewController.m 3 // 05-线程安全 4 // 5 // Created by apple on 14-6-23. 6 // Copyright (c) 2014年 itcase.