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;}

三、计算时间

开始下载之前记住一个时间,下载完成了获取到时间,二者一减就是花费的时间了。

这里面我们主要使用 NSDateCFTimeInterval

具体请下面完整代码。


四、我们无法执行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
原创粉丝点击