码迷,mamicode.com
首页 > 编程语言 > 详细

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)

时间:2015-06-04 22:51:42      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:gcd   线程   网络   扩展   

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)

用两种方法来实现网络加载图片


方法1:实现的效果:先加载背景色灰色,两秒后加载图片

- (void)viewDidLoad {

    [super viewDidLoad];

 

    self.view.backgroundColor=[UIColor grayColor];

    

    //刷新UI(在主线程中刷新UI!!!) --- 一般方法 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT0), ^{

        

        NSString * path=@"http://www.sinaimg.cn/dy/slidenews/4_img/2015_12/704_1579347_398766.jpg";

        

        NSData * data=[NSData dataWithContentsOfURL:[NSURL URLWithString:path]];

        UIImage * image=[UIImage imageWithData:data];

        

        NSLog(@"%@",[NSThread currentThread]);

        //返回主线程

        dispatch_sync(dispatch_get_main_queue(), ^{

            [NSThread sleepForTimeInterval:2];

            

            NSLog(@"%@",[NSThread currentThread]);     //测试代码---看看该处是否回到主线程

            

            self.imageView.image=image;   //image赋值

        });

    });

    

}



方法2:类扩展(封装类)

#import "UIImageView+loadImage.h"


@implementation UIImageView (loadImage)



- (void) loadImageWithPath:(NSString *)path defaultImage:(NSString *) dafaultPath

{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT0), ^{

       

        //block内部不能直接给外部的变量赋值,需要转一下类型

        __block NSString * str = path;

        if (path==nil)

        {

            str=dafaultPath;

        }

        else

        {

            NSData * data=[NSData dataWithContentsOfURL:[NSURL URLWithString:path]];

            UIImage * image=[UIImage imageWithData:data];

            [NSThread sleepForTimeInterval:2];

            

            //返回主线程

            dispatch_sync(dispatch_get_main_queue(), ^{

                

                self.image=image;

                

            });

            

        }

        

    });

}


@end


在viewController.m文件中导入#import "UIImageView+loadImage.h"   然后调用类扩展方法

@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    self.view.backgroundColor=[UIColor grayColor];

  

     NSString * path=@"http://www.sinaimg.cn/dy/slidenews/4_img/2015_12/704_1579347_398766.jpg";

    [self.imageView loadImageWithPath:path defaultImage:nil]; 

}


就两种方法比较而言,还是类扩展的方法比较好,如果以后遇到需要网络加载图片的问题,可以将封装好的类拿过来直接用。

用GCD的方式,加载网络图片(主线程加载图片+类扩展方式)

标签:gcd   线程   网络   扩展   

原文地址:http://blog.csdn.net/qq_27364431/article/details/46365641

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!