博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS多线程之3.NSThread的线程间通信
阅读量:7081 次
发布时间:2019-06-28

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

  我们把一些耗时操作放在子线程,例如下载图片,但是下载完毕我们不能在子线程更新UI,因为只有主线程才可以更新UI和处理用户的触摸事件,否则程序会崩溃。此时,我们就需要把子线程下载完毕的数据传递到主线程,让主线程更新UI,这就是线程间的通信。

原理

872567-20161104134855205-310325347.jpg

代码

// 点击屏幕开始下载图片- (void)touchesBegan:(NSSet
*)touches withEvent:(UIEvent *)event { NSLog(@"当前线程1=%@",[NSThread currentThread]); NSThread *thread = [[NSThread alloc] initWithBlock:^{ NSLog(@"当前线程2=%@",[NSThread currentThread]); NSString *strURL = @"http://pic33.nipic.com/20130916/3420027_192919547000_2.jpg"; UIImage *image = [self downloadImageWithURL:strURL]; if (image) { [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; } }]; [thread start];}

日志

2016-11-04 13:47:04.532 TTTTTTTTTT[10584:122182] 当前线程1=
{number = 1, name = main}2016-11-04 13:47:04.533 TTTTTTTTTT[10584:122269] 当前线程2=
{number = 3, name = (null)}

  子线程与主线程的回调应用的非常普遍。因为我们下载的数据大多数情况都是为了更新UI或者处理用户的触摸事件。其实在开发中,我们用NSThread的次数并不多,因为线程的同步、加锁都会造成一定的性能开销,我们还要手动管理线程的生命周期,很麻烦。开发的时候我们最多用的就是[NSThread currentThread]这个方法来判断一下当前线程。

  这一篇应该是关于NSThread最后一篇文章了,从下一篇开始讲GCD。

转载于:https://www.cnblogs.com/doujiangyoutiao/p/6029978.html

你可能感兴趣的文章
几种通用防注入程序绕过方法
查看>>
Clickjacking简单介绍
查看>>
Android Tangram模型:手把手带你学习淘宝、天猫都在用的UI框架模型
查看>>
Android P 开发者预览版发布,细数开发者最不能错过的新特性
查看>>
SpringBoot使用JdbcTemplate
查看>>
flutter之从零开始搭建(三)之 网络请求
查看>>
AI开发者福音!阿里云推出国内首个基于英伟达NGC的GPU优化容器
查看>>
android中的用到的设计模式
查看>>
《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply
查看>>
Android TransactionTooLargeException 解析,思考与监控方案
查看>>
Android音频处理知识(一)MediaRecorder录制音频
查看>>
SpringBoot+Vue.js前后端分离实现大文件分块上传
查看>>
Node.js环境性能监控
查看>>
CSS在没有设置高度的情况下如何让同级元素高度相等?
查看>>
1小时学会:最简单的iOS直播推流(五)yuv、pcm数据的介绍和获取
查看>>
spring微服务架构设计与轻量级微服务架构及最佳部署
查看>>
Android多线程之Handler、Looper与MessageQueue源码解析
查看>>
Java操作Excel文件
查看>>
十分钟了解HTTPS
查看>>
如何培养良好的编程实践
查看>>