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
时间: 2024-10-06 23:08:49

IOS中线程的通信的相关文章

Android中线程间通信原理分析:Looper,MessageQueue,Handler

自问自答的两个问题 在我们去讨论Handler,Looper,MessageQueue的关系之前,我们需要先问两个问题: 1.这一套东西搞出来是为了解决什么问题呢? 2.如果让我们来解决这个问题该怎么做? 以上者两个问题,是我最近总结出来的,在我们学习了解一个新的技术之前,最好是先能回答这两个问题,这样你才能对你正在学习的东西有更深刻的认识. 第一个问题:google的程序员们搞出这一套东西是为了解决什么问题的?这个问题很显而易见,为了解决线程间通信的问题.我们都知道,Android的UI/Vi

iOS多线程---GCD中线程的通信

在子线程的任务完成后,有时候需要从子线程回到主线程,刷新UI. 从子线程中回到主线程,以前已经写过一种方法: [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; 现在GCD又提供了一种方法: dispatch_async(dispatch_get_main_queue(), ^{ self.imageView.image=image; }); 示例

iOS中多线程_05_线程间通信NSThread/GCD

1.什么叫做线程间通信 在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 2.线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 3.线程间通信示例 UIImageView下载图片这个例子, 主线程中开启一个子线程去下载图片, 当图片下载完成之后再回到主线程中更新显示图片, 这样的一个过程就是线程间通信的一个过程. 4.NSThread线程间通信常用方法 // 第一种- (void)performSelectorOnMain

iOS开发NSOperation 三:操作依赖和监听以及线程间通信

一:操作依赖和监听 #import "ViewController.h" @interface ViewController () @end @implementation ViewController /** * 1:NSOperation的使用:1:先创建队列NSOperationQueue:若不创建队列直接封装任务则默认在当前线程中串行执行任务,其队列分为两种主队列和非主队列,主队列和GCD中的主队列一样[NSOperationQueue mainQueue],而alloc in

Java与iOS中的线程安全与线程同步

Java 中的线程安全与线程同步: 创建一个 Thread的实现类 MyThread , 作为线程体; 创建 Test 类, 在主函数中生成两个 Thread 对象, 两个对象公用一个线程体( MyThread 的对象 ); 线程安全: 避免多个线程同时访问统一资源; 解决办法: 加同步锁;  synchronized(this) { 要访问的资源; } iOS 中的线程安全与线程同步 线程安全: 同一资源在统一时间只能允许一个线程进行访问 解决办法: 方法一: 加同步锁 @synchroniz

Java多线程中线程间的通信

一.使用while方式来实现线程之间的通信 package com.ietree.multithread.sync; import java.util.ArrayList; import java.util.List; public class MyList { private volatile static List list = new ArrayList(); public void add() { list.add("apple"); } public int size() {

IOS中js与本地通信手记

如果只有一个webview要想js与ios的本地代码进行通信可以使用现成的phonegap框架,现因项目要求开发ipad版本的应用,页面中有多个需要多个webview所以需要自己编写js代码实现js与本地代码通信. 基本原理是:webview访问特殊的url前缀地址,然后在UIWebViewDelegate的shouldStartLoadWithRequest方法中对url进行过滤就可以达到js与本地代码进行通信了. 1.在MainViewController中实现UIWebViewDelega

【转载】iOS中delegate,notification,KVO三种模式实现通信的优缺点

原帖地址:http://blog.csdn.net/yangxt/article/details/8176636 在开发iOS中,有三种模式来实现controller之间的通信: 1.委托delegation: 2.通知中心Notification Center: 3.键值观察key value observing,KVO 因此,那为什么我们需要这些模式以及什么时候用它以及什么时候不用它. 1.delegate 基本特征: 一 个controller定义了一个协议(即一系列的方法定义).该协议描

OS X 和iOS 中的多线程技术(上)

OS X 和iOS 中的多线程技术(上) 本文梳理了OS X 和iOS 系统中提供的多线程技术.并且对这些技术的使用给出了一些实用的建议. 多线程的目的:通过并发执行提高 CPU 的使用效率,进而提供程序运行效率. 1.线程和进程 进程 什么是进程 进程是指在计算机系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行中其专用且受保护的内存空间内 比如同时打开 Xcode .Safari ,系统就会分别启动两个进程 通过活动监视器可以查看Mac系统中所开启的进程 线程 什么是线程 一