网络多线程-NSThread实现线程间通信
2015-11-27 22:03
405 查看
#import "ViewController.h"
@interface
ViewController ()
@property (weak,
nonatomic) IBOutlet
UIImageView *imageView;
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[NSThread
detachNewThreadSelector:@selector(download)
toTarget:self
withObject:nil];
}
//计算代码段的执行时间
-(void)test1
{
//1.确定url地址
NSDate *start = [NSDate
date];//获得当前的时间
NSURL *url = [NSURL
URLWithString:@"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg"];
NSDate *end = [NSDate
date];//获得当前的时间
NSLog(@"%f",[end
timeIntervalSinceDate:start]);
//2.根据url地址把图片的二进制数据下载到本地
NSData *data = [NSData
dataWithContentsOfURL:url];
//3.转换为图片
UIImage *image = [UIImage
imageWithData:data];
self.imageView.image = image;
}
//计算代码段的执行时间(2)
-(void)test2
{
//1.确定url地址
CFTimeInterval start =
CFAbsoluteTimeGetCurrent(); //2000
NSURL *url = [NSURL
URLWithString:@"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg"];
CFTimeInterval end =
CFAbsoluteTimeGetCurrent(); //2000
NSLog(@"%f",end - start);
//2.根据url地址把图片的二进制数据下载到本地
NSData *data = [NSData
dataWithContentsOfURL:url];
//3.转换为图片
UIImage *image = [UIImage
imageWithData:data];
self.imageView.image = image;
}
//在子线程中下载图片
-(void)download
{
NSLog(@"%@",[NSThread
currentThread]);
//1.确定url地址
NSURL *url = [NSURL
URLWithString:@"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg"];
//2.根据url地址把图片的二进制数据下载到本地
NSData *data = [NSData
dataWithContentsOfURL:url];
//3.转换为图片
UIImage *image = [UIImage
imageWithData:data];
//4.回到主线程刷新UI
/*
第三个参数:YES --NO
*/
// [self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:YES];
//第二种方式回到主线程
// [self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES];
[self.imageView
performSelectorOnMainThread:@selector(setImage:)
withObject:image waitUntilDone:YES];
}
//-(void)showImage:(UIImage *)image
//{
// NSLog(@"%@--刷新UI",[NSThread currentThread]);
// self.imageView.image = image;
//}
@end
@interface
ViewController ()
@property (weak,
nonatomic) IBOutlet
UIImageView *imageView;
@end
@implementation ViewController
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[NSThread
detachNewThreadSelector:@selector(download)
toTarget:self
withObject:nil];
}
//计算代码段的执行时间
-(void)test1
{
//1.确定url地址
NSDate *start = [NSDate
date];//获得当前的时间
NSURL *url = [NSURL
URLWithString:@"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg"];
NSDate *end = [NSDate
date];//获得当前的时间
NSLog(@"%f",[end
timeIntervalSinceDate:start]);
//2.根据url地址把图片的二进制数据下载到本地
NSData *data = [NSData
dataWithContentsOfURL:url];
//3.转换为图片
UIImage *image = [UIImage
imageWithData:data];
self.imageView.image = image;
}
//计算代码段的执行时间(2)
-(void)test2
{
//1.确定url地址
CFTimeInterval start =
CFAbsoluteTimeGetCurrent(); //2000
NSURL *url = [NSURL
URLWithString:@"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg"];
CFTimeInterval end =
CFAbsoluteTimeGetCurrent(); //2000
NSLog(@"%f",end - start);
//2.根据url地址把图片的二进制数据下载到本地
NSData *data = [NSData
dataWithContentsOfURL:url];
//3.转换为图片
UIImage *image = [UIImage
imageWithData:data];
self.imageView.image = image;
}
//在子线程中下载图片
-(void)download
{
NSLog(@"%@",[NSThread
currentThread]);
//1.确定url地址
NSURL *url = [NSURL
URLWithString:@"http://pic14.nipic.com/20110522/7411759_164157418126_2.jpg"];
//2.根据url地址把图片的二进制数据下载到本地
NSData *data = [NSData
dataWithContentsOfURL:url];
//3.转换为图片
UIImage *image = [UIImage
imageWithData:data];
//4.回到主线程刷新UI
/*
第三个参数:YES --NO
*/
// [self performSelectorOnMainThread:@selector(showImage:) withObject:image waitUntilDone:YES];
//第二种方式回到主线程
// [self performSelector:@selector(showImage:) onThread:[NSThread mainThread] withObject:image waitUntilDone:YES];
[self.imageView
performSelectorOnMainThread:@selector(setImage:)
withObject:image waitUntilDone:YES];
}
//-(void)showImage:(UIImage *)image
//{
// NSLog(@"%@--刷新UI",[NSThread currentThread]);
// self.imageView.image = image;
//}
@end
相关文章推荐
- 网络多线程-线程的安全
- 网络多线程-线程的状态
- 网络多线程-NSThread的使用
- 网络多线程-pthread的使用
- 网络多线程下载图片(SDWebImage)
- 网络多线程-下载图片(不用SDWebImage框架)
- 网络多线程-NSOperation线程间通信
- 网络多线程-NSOperation操作依赖和监听
- 网络多线程-NSOperation的常用的方法
- 网络多线程-NSOperation最大并发数
- 网络多线程-NSOperationQueue基本使用
- 网络多线程-NSOperation的简单使用
- 网络多线程 -单例模式业余练习代码MRC与ARC通用
- 网络多线程-单例模式ARC业余练习代码
- 网络多线程-GCD队列组
- 网络多线程 - 01-掌握-GCD快速迭代
- 08 SimpleServer
- Tornado源码分析之http服务器篇
- 关闭手机的通讯网络(无法接通)
- NodeJS服务器:一行代码 = 一个的HTTP服务器