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

简介:

一、简单说明

线程间通信:在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.m
 3 // 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.m
 3 // 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
复制代码
目录
相关文章
|
17天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
2天前
|
安全 算法 Java
JavaSE&多线程&线程池
JavaSE&多线程&线程池
16 7
|
2天前
|
存储 缓存 NoSQL
为什么Redis使用单线程 性能会优于多线程?
在计算机领域,性能一直都是一个关键的话题。无论是应用开发还是系统优化,我们都需要关注如何在有限的资源下,实现最大程度的性能提升。Redis,作为一款高性能的开源内存数据库,因其出色的单线程性能而备受瞩目。那么,为什么Redis使用单线程性能会优于多线程呢?
15 1
|
9天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
12 0
|
24天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
24天前
|
安全 Java 容器
Java并发编程:实现高效、线程安全的多线程应用
综上所述,Java并发编程需要注意线程安全、可见性、性能等方面的问题。合理使用线程池、同步机制、并发容器等工具,可以实现高效且线程安全的多线程应用。
14 1
|
25天前
|
JavaScript 前端开发
JS 单线程还是多线程,如何显示异步操作
JS 单线程还是多线程,如何显示异步操作
22 2
|
安全 测试技术 调度
iOS开发多线程篇-NSThread
上篇我们学习了iOS多线程解决方式中的NSOperation,这篇我主要概况总结iOS多线程中NSThread的解决方式和基本用例
|
缓存 程序员 调度
iOS开发多线程篇-GCD
上篇文章介绍了多线程是什么、线程的进程的区别,在这篇文章中,主要介绍iOS开发中多线程GCD的使用方式和注意事项,同时会给出几种多线程的案例。
|
调度 iOS开发
iOS开发多线程篇-概述
iOS开发多线程篇<概述>

热门文章

最新文章