NSThread线程间的通信

本文介绍了iOS开发中NSThread线程间的通信,通过一个图片下载实例,展示了如何在子线程中下载网络资源并在主线程中刷新UI,讲解了performSelector系列方法在多线程通信中的应用。
摘要由CSDN通过智能技术生成

  在iOS开发中,一个进程中通常会有多个线程,而且这些线程往往不是孤立的,多个线程之间通常需要进行通信。线程通信具体表现为一个线程向另一个线程传递数据,或者某个线程在执行完特定的任务以后,需要转到另一个线程中继续执行任务。下面,我们就通过一个实例来简单演示一下线程间的通信。

一、简单实现一个图片下载实例

  
  新建一个工程,程序运行以后,当我们点击屏幕,让它下载网络上指定的图片。在项目目录中选中Main.storyboard文件,往里面拖一个UIImageView控件,然后给它拖线。在ViewController中实现- touchesBegan: withEvent:方法:

// MARK:- 点击屏幕下载图片
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    // 点击下载图片
    [self downloadImage];
}

// MARK:- 下载网络上指定的图片
- (void)downloadImage {

    // 将URL地址转换为字符串
    NSURL *url = [NSURL URLWithString:@"http://img1.gtimg.com/ent/pics/hv1/224/60/2171/141184799.jpg"];

    // 根据URL地址将图片资源的二进制文件下载到本地
    NSData *imageData = [NSData dataWithContentsOfURL:url];

    // 将二进制数据转换为图片
    UIImage *image = [UIImage imageWithData:imageData];

    // 将图片设置到UIImageView控件上去
    self.imageView.image = image;

    // 打印当前线程
    NSLog(@"%@", [NSThread currentThread]);
}

  因为我们的图片来自网络,所以肯定需要图片的URL地址。有了地址以后,需要先将它转换为NSURL对象,然后再根据这个NSURL对象将图片的二进制数据下载到本地,接着再将图片的二进制数据转换为图片,最后再将它设置到UIImageView控件上去。

  程序运行以后,当我们点击屏幕,并不会马上看到下载下来的图片。此时,控制台会打印一条消息:


控制台打印出来的App Tr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值