iOS学习笔记-104.多线程03——线程间通信图片下载与时间计算
来源:互联网 发布:数学建模中的十大算法 编辑:程序博客网 时间:2024/05/18 17:57
- 多线程03线程间通信图片下载与时间计算
- 一图示
- 二下载图片
- 三计算时间
- 四我们无法执行http请求的解决方式
- 五完整代码
多线程03——线程间通信图片下载与时间计算
一、图示
我们要实现的结果如下:
二、下载图片
下载图片并且显示,我们的操作是:
子线程下载图片,主线程中来更新UI。
我们使用的是 NSThread 这个类中的方法来创建子线程
/*点击下载开启子线程下载图片*/- (IBAction)click1:(id)sender { [NSThread detachNewThreadSelector:@selector(downLoadImage) toTarget:self withObject:nil];}/*下载图片*/-(void)downLoadImage{ //1.设置url NSString * path = @"http://www.qqpk.cn/Article/UploadFiles/qingxinmeinv/6.jpg"; NSURL *url = [NSURL URLWithString:path]; //2.根据url下载图片二进制数据到本地 NSData *imageData = [NSData dataWithContentsOfURL:url]; //3.转换图片格式 UIImage *image = [UIImage imageWithData:imageData]; NSLog(@"%@",[NSThread currentThread]); //4.显示 切换到主线程上来 [self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO];// [self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];// [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];}/*显示图片*/-(void)showImage:(UIImage*)image{ NSLog(@"%@",[NSThread currentThread]); self.imageView.image = image;}
三、计算时间
开始下载之前记住一个时间,下载完成了获取到时间,二者一减就是花费的时间了。
这里面我们主要使用 NSDate 和 CFTimeInterval
具体请下面完整代码。
四、我们无法执行http请求的解决方式
五、完整代码
//// ViewController2.m// 03_UIView80多线程//// Created by 杞文明 on 17/8/31.// Copyright © 2017年 杞文明. All rights reserved.//#import "ViewController2.h"@interface ViewController2 ()@property (weak, nonatomic) IBOutlet UIImageView *imageView;@property (weak, nonatomic) IBOutlet UILabel *label;@end@implementation ViewController2//==================下载图片===================/*点击下载开启子线程下载图片*/- (IBAction)click1:(id)sender { [NSThread detachNewThreadSelector:@selector(downLoadImage) toTarget:self withObject:nil];}/*下载图片*/-(void)downLoadImage{ //1.设置url NSString * path = @"http://www.qqpk.cn/Article/UploadFiles/qingxinmeinv/6.jpg"; NSURL *url = [NSURL URLWithString:path]; //2.根据url下载图片二进制数据到本地 NSData *imageData = [NSData dataWithContentsOfURL:url]; //3.转换图片格式 UIImage *image = [UIImage imageWithData:imageData]; NSLog(@"%@",[NSThread currentThread]); //4.显示 切换到主线程上来 [self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:NO];// [self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:NO];// [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];}/*显示图片*/-(void)showImage:(UIImage*)image{ NSLog(@"%@",[NSThread currentThread]); self.imageView.image = image;}//=================计算下载时间====================//计算下载时间 方式一- (IBAction)clck2:(id)sender { //1.设置url NSString *path = @"http://www.qqpk.cn/Article/UploadFiles/201112/20111208140320960.jpg"; NSURL * url = [NSURL URLWithString:path]; //开始时间 NSDate *startDate = [NSDate date]; //2.根据url下载图片二进制数据到本地 NSData *imageData = [NSData dataWithContentsOfURL:url]; //结束时间 NSDate *endDate = [NSDate date]; NSTimeInterval time = [endDate timeIntervalSinceDate:startDate]; self.label.text = [NSString stringWithFormat:@"下载时间是:%lf",time]; //3.转换图片格式 UIImage *image = [UIImage imageWithData:imageData]; //4.显示 [self showImage:image];}//计算下载时间方式二- (IBAction)clck3:(id)sender { NSString * path = @"http://www.qqpk.cn/Article/UploadFiles/201112/20111208140318387.jpg"; NSURL *url = [NSURL URLWithString:path]; //开始时间 CFTimeInterval start = CFAbsoluteTimeGetCurrent(); NSData *imageData = [NSData dataWithContentsOfURL:url]; CFTimeInterval end = CFAbsoluteTimeGetCurrent(); self.label.text = [NSString stringWithFormat:@"下载时间是:%lf",end-start]; UIImage *image = [UIImage imageWithData:imageData]; [self showImage:image];}@end
阅读全文
0 0
- iOS学习笔记-104.多线程03——线程间通信图片下载与时间计算
- iOS学习笔记-107.多线程06——CGD线程间通信下载图片
- iOS学习笔记-111.多线程10——CGD队列组图片下载合成示例
- iOS学习笔记-121.多线程20——NSOperation图片下载合成示例
- (48)Java学习笔记——多线程 / 线程间通信 / 线程组 / 线程池 /
- iOS学习笔记-103.多线程02——线程状态、同步、通信
- IOS多线程系统学习之线程同步与线程通信
- IOS 中的多线程网络(二)—— 线程间通信与线程安全
- Java —— 多线程笔记 三、线程通信 与 线程组、线程异常
- iOS开发——多线程、NSThread、gcd、线程间通信
- ios开发多线程篇——线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程—04线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程篇—线程间的通信
- iOS开发多线程篇—线程间的通信
- appium python-client代码分析(一)
- 设计模式之单例模式
- 添加:TK_FLASH_INFO_AVAILABLE_TRUE的metadata 否则没有手电筒功能
- 回文数-lintcode-c++
- POJ1730 Perfect Pth Powers (math)
- iOS学习笔记-104.多线程03——线程间通信图片下载与时间计算
- 函数重载(overload)、函数覆盖(override)与隐藏
- python练习4
- 【Windows】下【Spark】源码编译
- [CMake] CMake的使用
- 如何实现一个楼中楼的评论系统
- [CMake] 推荐一个关于CMake的一个很详细的教程
- jquery mobile input 和select 改变宽度
- [PTA MOOC] 自测-5 Shuffling Machine(20 分)