博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发多线程篇—线程间的通信(转)
阅读量:5061 次
发布时间:2019-06-12

本文共 2524 字,大约阅读时间需要 8 分钟。

  这里转载 给自己一个备份

一、简单说明

线程间通信:在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;

 

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

 案例一:

//

// YYViewController.m
// 06-NSThread04-线程间通信
//
// Created by apple on 14-6-23.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

@interface YYViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@end

@implementation YYViewController

- (void)viewDidLoad

{
[super viewDidLoad];
}

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

{

// 在子线程中调用download方法下载图片

[self performSelectorInBackground:@selector(download) withObject:nil];
}

 

-(void)download

{
//1.根据URL下载图片
//从网络中下载图片
NSURL *urlstr=[NSURL URLWithString:@"fdsf"];

//把图片转换为二进制的数据

NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时

//把数据转换成图片

UIImage *image=[UIImage imageWithData:data];
//2.回到主线程中设置图片
[self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];
}

 

//设置显示图片

-(void)settingImage:(UIImage *)image
{
self.iconView.image=image;
}

@end

 

案例二:

//

// YYViewController.m
// 06-NSThread04-线程间通信
//
// Created by apple on 14-6-23.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"

#import <NSData.h>

@interface YYViewController ()

@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@end

@implementation YYViewController

- (void)viewDidLoad

{
[super viewDidLoad];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 在子线程中调用download方法下载图片

[self performSelectorInBackground:@selector(download) withObject:nil];

}

-(void)download
{

//1.根据URL下载图片

//从网络中下载图片
NSURL *urlstr=[NSURL URLWithString:@"fdsf"];

//把图片转换为二进制的数据

NSData *data=[NSData dataWithContentsOfURL:urlstr];//这一行操作会比较耗时

//把数据转换成图片

UIImage *image=[UIImage imageWithData:data];

//2.回到主线程中设置图片

//第一种方式
// [self performSelectorOnMainThread:@selector(settingImage:) withObject:image waitUntilDone:NO];

//第二种方式

// [self.imageView performSelector:@selector(setImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];

//第三种方式

[self.iconView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];
}

//设置显示图片
//-(void)settingImage:(UIImage *)image
//{
// self.iconView.image=image;
//}

@end

转载于:https://www.cnblogs.com/kingbo/p/3912575.html

你可能感兴趣的文章
★古今中外著名14大悖论
查看>>
[IIS] 测试的产品登陆之后有个引用外部站点js的请求半天都无法返回,导致网页一直在打转,Selenium的driver也无法对页面进行下一步的操作...
查看>>
[转]EeeBox 安裝 Debian 後驅動 Wireless 筆記
查看>>
C++中的1LL
查看>>
Python私有变量
查看>>
数据库Sharding的基本思想和切分策略
查看>>
javascript:event对象
查看>>
react-native 踩坑记
查看>>
VC为控件添加背景
查看>>
Wojilu学习笔记 (01)
查看>>
web.xml上下文初始化参数
查看>>
nginx,docker反向代理
查看>>
同事间一些搞笑的事情
查看>>
Python 基础篇(2)
查看>>
NOIP临考经验【转】
查看>>
ZOJ 3235 Prototype
查看>>
Best Practices in Asynchronous Programming
查看>>
数组的使用方法
查看>>
64位操作系统下IIS报“试图加载格式不正确的程序”错误
查看>>
存储过程里构建模糊查询,引号的处理
查看>>