美文网首页
iOS多线程-线程间通信

iOS多线程-线程间通信

作者: 学习天亦 | 来源:发表于2019-06-02 22:27 被阅读0次

复习下线程的基础知识, 这里主要是参考文顶顶多线程篇复习写的。

一、简单说明

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

线程间通信的体现

  • 1个线程传递数据给另1个线程
  • 在1个线程中执行完特定任务后,转到另1个线程继续执行任务

线程间通信常用方法

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

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thread withObject:(id)arg waitUntilDone:(BOOL)wait;
线程间通信示例 – 图片下载

代码示例


@interface ViewController ()

@property (strong, nonatomic) UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 20, 300, 300)];
    _imageView.backgroundColor = [UIColor redColor];
    [self.view addSubview:_imageView];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    //在子线程下载
    [self performSelectorInBackground:@selector(download) withObject:nil];
}

/**
 *  下载图片
 */
- (void)download {
    NSLog(@"download---%@", [NSThread currentThread]);
    // 1.图片地址,其实是一行
    NSString *urlStr = @"https://timgsa.baidu.com/timg?image&quality=80"
    @"&size=b9999_10000&sec=1559061649110&di=adfd3a30f3bb4868722529859d14ae9d"
  @"&imgtype=0&src=http%3A%2F%2Fpic31.nipic.com%2F20130719%2F9885883_095141604000_2.jpg";
    
    NSURL *url = [NSURL URLWithString:urlStr];
    
    // 2.根据地址下载图片的二进制数据(这句代码最耗时)
    NSLog(@"---begin");
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSLog(@"---end");
    
    // 3.设置图片
    UIImage *image = [UIImage imageWithData:data];
    
    // 4.回到主线程,刷新UI界面(为了线程安全)
    [self performSelectorOnMainThread:@selector(downloadFinished:) withObject:image waitUntilDone:NO];
//    [self performSelector:@selector(downloadFinished:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES];
//    [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
    
    NSLog(@"-----done----");
}

- (void)downloadFinished:(UIImage *)image {
    self.imageView.image = image;
    NSLog(@"downloadFinished---%@", [NSThread currentThread]);
}

@end

相关文章

  • GCD练习

    GCD练习 ios 多线程 GCD : ios 多线程 全剧队列,异步执行 线程间通信 信号量 文件锁 单利模式 ...

  • iOS多线程-线程间通信

    复习下线程的基础知识, 这里主要是参考文顶顶多线程篇复习写的。 一、简单说明 线程间通信:在1个进程中,线程往往不...

  • iOS - 线程 / 进程 的通信

    1. 线程中的通信 线程中通信的体现 在iOS多线程开发中,有NSThread、GCD、NSOpeartion几种...

  • 多线程之iOS线程间通信

    什么叫做线程间通信在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个线程传...

  • IOS多线程-线程间的通信

    使用NSThread实现线程间的通信 实现效果 ⚠️注意!!! 如果点击屏幕发现不能正常下载图片,并且报以下错误的...

  • iOS 多线程(六)-线程间通信

    iOS 中,两个线程之间要想互相通信,可以使用:NSMachPort示例:

  • iOS 多线程 线程安全 线程间通信

    一、什么是多线程 一个iOS程序就像一个圆,不断循环,直到将它切断。一个运行着的程序就是一个进程或者叫做一个任务,...

  • iOS多线程相关面试题

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • 多线程之--NSOperation

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

  • iOS多线程之--NSThread

    iOS多线程demo iOS多线程之--NSThread iOS多线程之--GCD详解 iOS多线程之--NSOp...

网友评论

      本文标题:iOS多线程-线程间通信

      本文链接:https://www.haomeiwen.com/subject/hfojtctx.html