有关UIImageView+AFNetworking 下载图片的线程问题

今天写了一个demo,从服务器获取图片,然后显示在cell上,大家都知道cell的重用机制,当往下拉的时候,上面的cell遮住了,下面的cell就会重用被遮住的cell,

贴代码:

 NSString *urlstring=[dict objectForKey:@"imagePath"];
    NSURL *url=[NSURL URLWithString:urlstring];//获取图片的url路径
    NSURLRequest *urlrequest=[[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];
    NSLog(@"UI Thread is %@",[NSThread currentThread]);//这里是主线程
    //使用UIImageView+AFNetWorking 异步下载图片,缓存到本地
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
         NSLog(@"current Thread :%@",[NSThread currentThread]);//这里使用异步机制,肯定是非UI线程
        [cell.myImage setImageWithURLRequest:urlrequest
                            placeholderImage:[UIImage imageNamed:[dict objectForKey:@"imageName"]]
                                     success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
            NSLog(@"load image thread is %@",[NSThread currentThread]);//猜猜这里是什么线程??
            dispatch_async(dispatch_get_main_queue(), ^{
                cell.myImage.image=image;
                 NSLog(@"image thread :%@",[NSThread currentThread]);//这里肯定是主线程
            });

            NSLog(@"下载图片成功");
        } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
            NSLog(@"图片加载失败:%@",error);
        }];

刚学AFNetworking 的时候,不知道看了谁的博文,说

setImageWithURLRequest:urlrequest 这个方法是异步机制,好吧,我承认当时单纯了,直到今天我写这个demo的时候,发现如果不是用异步机制,下载的图片非常慢,有时候还会超时,滑动cell的时候会非常卡,然后我就打印线程,看看是不是在主线程下载东西了,打印结果:

看,
setImageWithURLRequest:urlrequest 这个方法中打印的线程竟然是主线程,反正我惊讶了!!
时间: 2024-10-03 23:55:23

有关UIImageView+AFNetworking 下载图片的线程问题的相关文章

【iOS开发之旅】AFNetworking与SDWebImage下载图片

AFNetworking与SDWebImage下载图片 // // ViewController.m // AFNetworkingDemo // // Created by ChenQianPing on 16/1/31. // Copyright © 2016年 chenqp. All rights reserved. // #import "ViewController.h" #import "AFNetworking.h" #import "UII

开子线程下载图片,回到主线程刷新UI步骤

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [NSThread detachNewThreadSelector:@selector(download) toTarget:self withObject:nil]; } #pragma mark ---------------------- #pragma Methods //开子线程下载图片,回到主线程刷新UI -(void)downl

从网络下载图片,保存,并用UIImageView从保存中显示

代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIImageView *img=[[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 200, 200)]; img.backgroundColor=[UIColor redColor]; [self.view addSubview:img]; /

GCD开启子线程下载图片

//开启子线程下载图片 //1.获取一个全局串行队列    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);    __weak typeof(self) weakSelf = self; //2.把任务添加到队列中执行    dispatch_async(queue, ^{        NSURL *url = [NSURL URLWithString:_imgStr

使用UIImageView+AFNetworking 图片不能正常显示的原因

今天调的东西涉及到图片加载,我刚看了下项目里以前导入了SDWebImage库,又发现整个就一个地方使用到了SDWebImage异步加载图片的方法,感觉占体积又鸡肋,干脆去掉,用UIImageView+AFNetworking好了. 使用的代码是: [imgView setImageWithURL:[NSURL URLWithString:self.srModel.img] placeholderImage:nil]; 结果发现图片显示不出来,看了下右边的控制台,打印出了:App Transpor

AFNetworking上传下载图片

1 #pragma mark 上传图片 2 -(void)Upload{ 3 4 UIImage * image = [UIImage imageNamed:@"iphone.png"]; 5 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 6 7 NSData *imageData = UIImageJPEGRepresentation(image, 1); 8 NSD

AFNetworking断点续传、下载图片

下载图片:下载图片后保存在本地文件中 //在lock和挂起状态都会下载 NSURLRequest *request=[[NSURLRequest alloc]initWithURL:[NSURL URLWithString:@"http://attach.bbs.miui.com/forum/201110/05/082552rm0v11zlv1axd13l.png"]]; //操作配置 AFHTTPRequestOperation *requestOperator=[[AFHTTPRe

网络下载图片 (cell部分)

网络下载图片不能放在主线程: 1.会阻塞主线程:影响用户体验 2.重复下载,浪费流量,浪费时间 推荐第三方框架SDWebImage, 包含的功能:图片下载.图片缓存.下载进度监听.gif处理等等. 导入这个分类:#import "UIImageView+WebCache.h"

swift详解之十四 -----------NSThread 异步下载图片

NSThread 异步下载图片 在IOS中处理多线程有三个方案 , NSThread .NSOperation .GCD .当然GCD应该是最方便的 ,我们一个一个学 .先理解底层的,最后再使用最方便的 . NSThread: 优点:NSThread 比其他两个轻量级 缺点:需要自己管理线程的生命周期,线程同步.线程同步对数据的加锁会有一定的系统开销 我们先研究下用NSThread 异步加载网络图片 : NSThread有两种创建方式 ,一种是通过实例方法.一种是通过类方法. let threa