IOS UI多线程 NSThread 下载并显示图片到UIImageView

效果图

@property (weak,nonatomic)IBOutletUILabel *downLabelInfo;

@property (weak,nonatomic)IBOutletUIImageView *imageView;

@end

@implementationViewController

- (void)viewDidLoad

{

[super viewDidLoad];

NSString *url  [email protected]"http://d.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=6cbcab9dabec8a13141a53e3c135aaec/aa64034f78f0f7369453c3730855b319ebc41316.jpg";

@autoreleasepool {

NSThread *thread = [[NSThreadalloc]initWithTarget:selfselector:@selector(downloadImage:)object:url];

[thread start];

}

}

- (void)didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];

}

-(void) downloadImage:(NSString *)url {

// 要把显示的内容放到同步方法前面即可

self->_downLabelInfo.text [email protected]"正在下载图片中...";

// 同步方法 会卡线程直到完成位置

NSData *imageData = [NSDatadataWithContentsOfURL:[NSURLURLWithString:url]];

UIImage *image =[UIImageimageWithData:imageData];

if(image==nil)

{

}

else

{

//self->_downLabelInfo.text = @"正在下载图片中...";所以这条语句写了也没用

[self performSelectorOnMainThread:@selector(updateImageView:)withObject:(image)waitUntilDone:YES];

}

}

-(void) updateImageView:(UIImage *)image

{

self->_imageView.image = image;

self->_imageView.frame=CGRectMake(self.view.frame.size.width/2-100,self.view.frame.size.height/2-100,200, 200);

self->_downLabelInfo.textColor = [UIColorredColor];

self->_downLabelInfo.text [email protected]"图片下载完成";

}

@end

第二种方式使用 NSURLConnection  sendSynchronousRequest 同步方式获取图片内容并显示

将downloadImage方法修改如下

-(void) downloadImage:(NSString *)url

{

self->_downLabelInfo.text [email protected]"正在下载图片中...";

NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:url]];

NSError *error;

// 此处将会造成阻塞

NSData *data   = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:&error];

if(data ==nil)

{

NSLog(@"nil");

}

else

{

UIImage *image =[UIImageimageWithData:data];

self->_imageView.image = image;

self->_downLabelInfo.textColor = [UIColorredColor];

self->_downLabelInfo.text [email protected]"图片下载完成";

}

}

IOS UI多线程 NSThread 下载并显示图片到UIImageView

时间: 2024-10-12 21:15:33

IOS UI多线程 NSThread 下载并显示图片到UIImageView的相关文章

IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)

编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload目录下,并按序号命名. 3.在文本框输入完成之后点击其他地方,键盘自动消失. 准备工作: 1.输入的URL有可能是http而非https,需要在Info.plist中添加如下代码: 1 <key>NSAppTransportSecurity</key> 2 <dict> 3

Spring MVC 上传、下载、显示图片

通过这篇文章你可以了解到: 使用 SpringMVC 框架,上传图片,并将上传的图片保存到文件系统,并将图片路径持久化到数据库 在 JSP 页面上实现显示图片.下载图片 [TOC] 1. 准备工作 首先我们需要准备好开发环境,本文测试环境是 SSM(Spring 4.3.9 + SpringMVC 4.3.9 + MyBatis 3.4.4) ,数据库为 MySQL 5.5,数据库连接池 C3P0 0.9.5.2,构建包 Maven 3.5.0,Tomcat 8.5. 限于篇幅原因,关于 SSM

iOS开发-多线程-NSThread

iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 -

[iOS]深入浅出 iOS 之多线程 NSThread

http://www.cocoachina.com/bbs/read.php?tid=43852 OS 支持多个层次的多线程 编程,层次越高的抽象程度越高,使用起来也越方便,也是苹果最推荐使用的方法.   下面简要说明这三种不同范式:  Thread 是这三种范式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程 之间的同步.线程 共享同一应用程序的部分内存空间,它们拥有对数据相同的访问权限. 你得协调多个线程 对同一数据的访问,一般做法是在访问之前加锁,这会导

iOS:多线程NSThread的详细使用

NSThread具体使用:直接继承NSObject NSThread:. 优点:NSThread 是轻量级的,使用简单 缺点:需要自己管理线程的生命周期.线程同步.线程同步对数据的加锁会有一定的系统开销 1.属性 @property (readonly, retain) NSMutableDictionary *threadDictionary;  //线程字典 @property double threadPriority;                                  

转载的一篇关于iOS里多线程NSThread/NSOperation/GCD的文章

转载 IOS多线程编程对于初学者来说,总是会觉得很难理解和掌握,现在通过几个实例来更加系统全面的理解IOS多线程编程,希望对大家有所帮助. 1:首先简单介绍什么叫线程可并发执行的,拥有最小系统资源,共享进程资源的基本调度单位.共用堆,自有栈(官方资料说明iOS主线程栈大小为1M,其它线程为512K).并发执行进度不可控,对非原子操作易造成状态不一致,加锁控制又有死锁的风险. 2:IOS中的线程iOS主线程(UI线程),我们的大部分业务逻辑代码运行于主线程中.没有特殊需求,不应引入线程增加程序复杂

利用jsoncpp+curl+opencv从服务器上解析到下载到显示图片

#include<iostream> #include<fstream> #include"json.h" #include "opencv2/opencv.hpp" using namespace cv; using namespace std; void get_json_txt() { system("curl \"http://192.168.8.3:3000/getPhotoWallLogin?user=stev

iOS多线程自定义operation加载图片 不重复下载图片

摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用:   2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验   2:自定义operation继承自NSOperation,在子线程中下载图片: 3:保证图片只下载一次,还有保证下载任务不重复 ------------------------------------------------------------------------------------ 实现原理:1:图片缓存:用

ios多线程GCD下载图片

1 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 2 { 3 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 4 dispatch_async(queue, ^{ 5 NSLog(@"--download--%@", [NSThread currentThread]); 6 /