GCD 线程间的通信

//异步函数+全局并发队列 嵌套 异步函数+主队列

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIButton *button;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 定义属性名称的时候,一般不要以new开头.如果以new开头了,就不要以驼峰命名.

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

// 1. 在子线程下载图片

//  (异步函数 + 全局并发队列) 内部嵌套一个 (异步函数 + 主队列)

//  最常用的一种组合,需要掌握.

dispatch_async(dispatch_get_global_queue(0, 0), ^{

// 下载图片

NSURL *url = [NSURL URLWithString:@"http://23.27.119.120/uploads/allimg/150814/2-150Q40Q03TE.jpg"];

NSData *data = [NSData dataWithContentsOfURL:url];

UIImage *image = [UIImage imageWithData:data];

// 回到主线程更新UI/显示图片

dispatch_async(dispatch_get_main_queue(), ^{

// 主线程

// 给按钮设置图片

// 如果直接给按钮设置图片,需要改变按钮的类型为 custom

// [self.button setImage:image forState:UIControlStateNormal];

// 如果是设置按钮的背景图片,不需要将按钮类型改变

[self.button setBackgroundImage:image forState:UIControlStateNormal];

});

});

// 2. 在主线程更新UI

}

@end

时间: 2024-12-28 01:12:46

GCD 线程间的通信的相关文章

GCD线程间的通信

#define HMGlobalQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) #define HMMainQueue dispatch_get_main_queue() #import "HMViewController.h" @interface HMViewController () @property (weak, nonatomic) IBOutlet UIButton *button;

线程间的通信的几种方式

线程间的通信: - 什么叫做线程间通信 - 在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 - 线程间通信的体现 - 1个线程传递数据给另1个线程 - 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 - 线程间通信常用方法 - 方法一:利用perform的方式 - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait; - (void)

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

iosblog's iOS开发多线程篇—线程间的通信 Cocoa为iOS线程间通信提供2种方式,1种是performSelector,另1种是Port. 先说第1种,performSelector,有以下几种: 第2种为NSMachPort方式.NSPort有3个子类,NSSocketPort.NSMessagePort.NSMachPort,但在iOS下只有NSMachPort可用. 使用的方式为接收线程中注册NSMachPort,在另外的线程中使用此port发送消息,则被注册线程会收到相应消

线程间的通信、同步方式与进程间通信方式

1.线程间的通信方式 1)使用全局变量(由于多个线程可能更改全局变量,因此全局变量最好声明为volatile) 2) 使用消息实现通信 3)使用事件CEvent类实现线程间的通信 2.同步/异步(C端) 同步:在C端发出一个功能调用时,没有得到结果之前就不返回 异步: 一个请求通过事件触发后,得到服务器处理后才处理完毕 3. 阻塞/非阻塞(S端) 阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行).函数只有在得到

线程(二)__线程间的通信

线程间的通信:多个线程在处理同一资源,但是任务却不同.一.等待唤醒机制涉及的方法:1.wait();让线程处于冻结状态,被wait的线程会被存储到线程池中2.notify();唤醒线程池中的一个任意线程3.notifyAll();唤醒线程池中的所有线程这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法,必须要明确到底操作的是哪个锁上的线程wait()对A锁上面的线程进行操作后只能用A锁的notify来唤醒.被wait之后的线程可认为放在线程池中. 为什么操作线程的方法wait no

VC++多线程编程-线程间的通信和线程同步

引用:http://blog.csdn.net/zjc0888/article/details/7372258 线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信.这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明. 使用全局变量进行通信 由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量.对于标准类型

新建线程与UI线程间的通信

现在用一个实例来演示一下自己的新建线程与UI线程间的通信. UI界面包含3个控件: 一个输入框,用来输入数字: 一个显示框,用来显示从2开始,到输入数字之间的所有质数: 一个按钮,点击后获取输入框输入的数字,交给新建线程处理,线程计算质数后把结果传给UI线程,UI线程显示结果到显示框. XML如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android=&q

网络开始---多线程---线程间的通信(掌握)(五)

1 #import "HMViewController.h" 2 3 @interface HMViewController () 4 @property (weak, nonatomic) IBOutlet UIImageView *imageView; 5 @end 6 7 @implementation HMViewController 8 9 - (void)viewDidLoad 10 { 11 [super viewDidLoad]; 12 // Do any additi

Java多线程之线程的状态以及线程间协作通信导致的状态变换

一:线程的状态以及变化图 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态). New:新建状态,当线程创建完成时为新建状态,即new Thread(...),还没有调用start方法时,线程处于新建状态. Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状态,等待CPU资源.处于就绪状态的线程由Java运行时系统的线程调度程序(thread scheduler)来