一、简单说明

线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信

线程间通信的体现

1个线程传递数据给另1个线程

在1个线程中执行完特定任务后,转到另1个线程继续执行任务

线程间通信常用方法

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;

线程间通信示例 – 图片下载

代码1:

 1 //2 //  YYViewController.m3 //  06-NSThread04-线程间通信4 //5 //  Created by apple on 14-6-23.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYViewController.h"
10 @interface YYViewController ()
11 @property (weak, nonatomic) IBOutlet UIImageView *iconView;
12 @end
13
14 @implementation YYViewController
15
16 - (void)viewDidLoad
17 {
18     [super viewDidLoad];
19 }
20
21 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
22 {
23
24 // 在子线程中调用download方法下载图片
25     [self performSelectorInBackground:@selector(download) withObject:nil];
26 }
27
28
29
30 -(void)download
31 {
32     //1.根据URL下载图片
33     //从网络中下载图片
34     NSURL *urlstr=[NSURL URLWithString:@"fdsf"];
35
36     //把图片转换为二进制的数据
37     NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时
38
39     //把数据转换成图片
40     UIImage *image=[UIImage imageWithData:data];
41
42     //2.回到主线程中设置图片
43     [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
44 }
45
46
47
48 //设置显示图片
49 -(void)settingImage:(UIImage *)image
50 {
51     self.iconView.image=image;
52 }
53
54 @end

代码2:

 1 //2 //  YYViewController.m3 //  06-NSThread04-线程间通信4 //5 //  Created by apple on 14-6-23.6 //  Copyright (c) 2014年 itcase. All rights reserved.7 //8 9 #import "YYViewController.h"
10 #import <NSData.h>
11
12 @interface YYViewController ()
13 @property (weak, nonatomic) IBOutlet UIImageView *iconView;
14 @end
15
16 @implementation YYViewController
17
18 - (void)viewDidLoad
19 {
20     [super viewDidLoad];
21 }
22
23
24 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
25 {
26 // 在子线程中调用download方法下载图片
27
28     [self performSelectorInBackground:@selector(download) withObject:nil];
29 }
30
31
32 -(void)download
33 {
34
35     //1.根据URL下载图片
36     //从网络中下载图片
37     NSURL *urlstr=[NSURL URLWithString:@"fdsf"];
38
39     //把图片转换为二进制的数据
40     NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时
41
42     //把数据转换成图片
43     UIImage *image=[UIImage imageWithData:data];
44
45     //2.回到主线程中设置图片
46     //第一种方式
47 //    [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
48
49     //第二种方式
50     //    [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];
51
52     //第三种方式
53    [self.iconView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
54 }
55
56
57 //设置显示图片
58 //-(void)settingImage:(UIImage *)image
59 //{
60 //    self.iconView.image=image;
61 //}
62
63 @end

转载于:https://www.cnblogs.com/LifeTechnologySupporter/p/10353097.html

iOS开发多线程篇—线程间的通信相关推荐

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

    iOS开发多线程篇-线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(te ...

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

    一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数 ...

  3. iOS开发多线程篇—多线程简介

    iOS开发多线程篇-多线程简介 一.进程和线程 1.什么是进程 进程是指在系统中正在执行的一个应用程序 每一个进程之间是独立的.每一个进程均执行在其专用且受保护的内存空间内 比方同一时候打开QQ.Xc ...

  4. iOS开发多线程篇—自定义NSOperation

    iOS开发多线程篇-自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...

  5. java多线程:线程间的通信-生产者和消费者(三)

    在一个程序中,往往会通过多个线程协同来共同完成一项任务,线程间必然需要进行信息的传递,也即是进程间的通信,我们用生产者和消费者的例子来具体分析: 对于生产者和消费者之间的关系,他们都是针对同一资源的操 ...

  6. ios开发笔记之 线程间通信

    performSelectorOnMainThread:selector:waitUntilDone: 用于线程间通信 使两个线程同步或者时异步执行. block阻塞 转载于:https://www. ...

  7. iOS开发多线程篇—多线程简单介绍

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过& ...

  8. iOS开发——高级篇——线程同步、线程依赖、线程组

    前言 对于iOS开发中的网络请求模块,AFNet的使用应该是最熟悉不过了,但你是否把握了网络请求正确的完成时机?本篇文章涉及线程同步.线程依赖.线程组等专用名词的含义,若对上述名词认识模糊,可先进行查 ...

  9. iOS开发——多线程篇——GCD

    一.基本概念 1.简介 什么是GCD 全称是Grand Central Dispatch,可译为"牛逼的中枢调度器" 纯C语言,提供了非常多强大的函数 GCD的优势 GCD是苹果公 ...

  10. ios开发多线程篇--异步加载网络图片GCD

    一.异步加载网络图片 1.ATS (1)简介 从iOS9.0开始,如果按照以前的方式写代码,在访问网络的时候 ,会报以下警告信息: App Transport Security has blocked ...

最新文章

  1. TCP/IP详解--第十一章
  2. Eclipse安装hibernate插件的问题
  3. [LeetCode]Perfect Squares
  4. mount and fstab的使用(整理)
  5. 线性表的链式存储集成
  6. 过滤特征_万字长文讲解如何做特征工程
  7. PHP curl扩展实现数据抓取
  8. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_03.jdbc操作数据库的问题分析
  9. 从零开始,跟我一起做jblog项目(一)引言
  10. POJ2653 Pick-up sticks
  11. python在屏幕上画画,屏幕上的Python绘图
  12. linux下blast设计引物,手把手教你设计引物(图文并茂)
  13. 伟大时刻:小米的命门
  14. 关灯游戏 Lights out (二)(首行枚举+位运算,搜索全部解)
  15. 演讲者模式投影到幕布也看到备注_PPT的备注功能怎么使用?如何让备注仅被演示者看到?...
  16. 倾斜摄影三维模型五种常见格式
  17. 偏差、误差、训练误差、测试误差
  18. 电子罗盘的椭球拟合与椭球变换
  19. 山西农业大学计算机科学与技术分数线,山西农业大学计算机科学与技术专业2016年在湖北理科高考录取最低分数线...
  20. java程序license验证_基于TrueLicense实现产品License验证功能

热门文章

  1. 12864 显示多种图形
  2. Ubuntu下搭建JavaEE开发环境
  3. RHEL 5.1 下面安装tftp服务
  4. 搭建vue项目时运行npm run dev 报错问题解决
  5. Python安装详细步骤
  6. Vue组件创建和组件传值
  7. Hadoop Hive概念学习系列之hive里的扩展接口(CLI、Beeline、JDBC)(十六)
  8. Centos6.7 简单搭建dns服务器
  9. Mysql——数据查询
  10. 邮件服务器向hotmail等邮箱发信收到退信的解决方法