博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
05-线程间通讯
阅读量:6818 次
发布时间:2019-06-26

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

#线程间通讯

  • 从网络中下载一张图片放入到UIImageView中
- (void)touchBegin:(NSSet *)touches withEvent:(UIEvent *)event{    //1.下载图片    /*    //测试执行时间    //NSDate *begin = [NSDate date];    CFAbsoluteTime begin = CFAbsoluterTimeGetCurrent();        //从网络下载一张图片    NSURL *url = [NSURL URLWihtString:@"图片资源网址"];    NSData *data = [NSData dataWithContentsOfURL:url];//耗时,应开启子线程        //NSDate *end = [NSDate date];    //NSLog(@"%f",[end timeIntervalSincedate:begin]);    CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();    NSLog(@"%f",end - begin);        //2.将二进制转换为图片    UIImage *image = [UIImage imageWithData:data];    //3.显示图片    self.imageView.image = image;    */        //开启一个子线程,下载图片    [self performSelectorInBackground:@selector(download) withObject:nil];}
  • 在主线程中下载图片会影响性能,应该开启一个子线程
- (void)download{    //1.下载图片    NSURL *url = [NSURL URLWihtString:@"图片资源网址"];    NSData *data = [NSData dataWithContentsOfURL:url];//耗时,应开启子线程        //2.将二进制转换为图片    UIImage *image = [UIImage imageWithData:data];        //3.更新UI#warning 注意:千万不要再子线程中更新UI,会出问题    //self.imageView.image = image;//不能子子线程中更新UI    //在主线程中更新UI    [self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];//开发中常用        //[self performSelectorOnMainThread:@selector(updateImage:) withObject:image waitUntilDone:YES];        NSLog(@"------");}- (void)updateImage:(UIImage *)image{    NSLog(@"++++++++");    self.imageView.image = image;}
  • waitUntilDone:
    • 如果传入YES,那么会等待@selector中的函数执行完毕,就可以执行之后的代码
    • 如果传入NO,那么不会等待@selector中的函数执行完毕,就可以执行之后的代码
更新UI的方法
  • 1.使用setImage:(开发中常用)
[self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
  • 2.使用自定义函数:(了解)
[self performSelectorOnMainThread:@selector(updateImage:) withObject:image waitUntilDone:YES];  - (void)updateImage:(UIImage *)image{    self.imageView.image = image;}
  • 3.使用:performSelector:(了解)
    • 可以在指定的线程中,调用指定对象的指定方法
[self performSelector:@selector(updateImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES]; - (void)updateImage:(UIImage *)image{    self.imageView.image = image;}

转载于:https://www.cnblogs.com/KrystalNa/p/4780316.html

你可能感兴趣的文章
apicloud弹出层
查看>>
从入门到菜鸟的经验分享
查看>>
python疑问6:生成器,可迭代对象,迭代器区别和联系
查看>>
【299天】跃迁之路——程序员高效学习方法论探索系列(实验阶段57-2017.12.01)...
查看>>
对象的点查询和中括号查询
查看>>
一行代码搞定人脸识别
查看>>
python3进程和线程
查看>>
【quickhybrid】Android端的项目实现
查看>>
Webpack3简单入门1
查看>>
好的代码可以自己说话!
查看>>
css揭秘笔记——用户体验
查看>>
【287天】每日项目总结系列025(2017.11.19)
查看>>
对于“不用setInterval,用setTimeout”的理解
查看>>
JavaScript设计模式--工厂模式
查看>>
前端开发者搭建自己的博客
查看>>
storm集群安装与部署
查看>>
tomcat
查看>>
微信原图泄露的只能是 Exif ,你的隐私不在这!!!
查看>>
在 V8 中从 JavaScript 到 C++ 的类型转换
查看>>
升级Python导致的yum,pip报错解决方案
查看>>