zoukankan      html  css  js  c++  java
  • imageDownloader

    .h

    #import <UIKit/UIKit.h>

    @protocol imageDownloadDelegate <NSObject>

    @optional

    -(void)imageDownloadWithImage:(UIImage *)image;

    @end

    // 声明一个block 参数类型是UIImage 返回值是void 别名Result

    typedef void(^Result)(UIImage *img);

    @interface ImageDownload : NSObject

    #pragma mark - 声明方法  被调用后直接下载

    +(void)imageDownloadWithUrlStr:(NSString *)urlStr

                          delegate:(id<imageDownloadDelegate>)delegate;

    #pragma mark - 声明方法 使用block的方式

    +(void)imageDownloadWithUrlStr:(NSString *)urlStr

                            result:(Result)result;

    @end

     
    .m

    #import "ImageDownload.h"

    @implementation ImageDownload

    #pragma mark - 实现方法 代理

    +(void)imageDownloadWithUrlStr:(NSString *)urlStr

                          delegate:(id<imageDownloadDelegate>)delegate

    {

        NSURL *url = [NSURL URLWithString:urlStr];

        NSURLRequest *request = [NSURLRequest requestWithURL:url];

        [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue new]autorelease] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

            UIImage *image = [UIImage imageWithData:data];

            dispatch_sync(dispatch_get_main_queue(),^{

                if (delegate!=nil && [delegate respondsToSelector:@selector(imageDownloadWithImage:)]) {

                    [delegate imageDownloadWithImage:image];

                }

            });

        }];

    }

    #pragma mark - 实现方法  block 方式

    +(void)imageDownloadWithUrlStr:(NSString *)urlStr

                            result:(Result)result

    {

        NSURL *url = [NSURL URLWithString:urlStr];

        NSURLRequest *request = [NSURLRequest requestWithURL:url];

        [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue new]autorelease] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

            UIImage *image = [UIImage imageWithData:data];

            

            // 回到主线程使用block

            dispatch_sync(dispatch_get_main_queue(), ^{

               // block 调用

                result(image);

            });

        }];

    }

    再去 ViewController 

    - (IBAction)buttonAction:(UIButton *)sender

    {

        /*

       //http://img4.duitang.com/uploads/item/201208/10/20120810091225_hvA2r.thumb.700_0.jpeg

        //1 NSURL

        NSURL *url = [NSURL URLWithString:@"http://img4.duitang.com/uploads/item/201208/10/20120810091225_hvA2r.thumb.700_0.jpeg"];

        

        //2 NSURLREQUEST

        NSURLRequest *request = [NSURLRequest requestWithURL:url];

        

        //3 NSURLConnection

        

        __block ViewController *weakSelf = self;

        [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue new]autorelease] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

            //4 获取data数据  转为UIImage类型

            UIImage *image = [UIImage imageWithData:data];

            //5 回到主界面 刷新数据

            dispatch_sync(dispatch_get_main_queue(),^{

                weakSelf.imageView.image = image;

            });

        }];

         */

        // 直接发送消息 设置代理

        // [ImageDownload imageDownloadWithUrlStr:@"http://img4.duitang.com/uploads/item/201208/10/20120810091225_hvA2r.thumb.700_0.jpeg" delegate:self];

        

        // 使用block

        __block ViewController *weakSelf = self;

        [ImageDownload imageDownloadWithUrlStr:@"http://img4.duitang.com/uploads/item/201208/10/20120810091225_hvA2r.thumb.700_0.jpeg" result:^(UIImage *img)

         {

             // 将block中参数显示到UIImageView上

             weakSelf.imageView.image = img;

         }];

    }

    @end

    我不负责生产代码,我是博客园搬运工~
  • 相关阅读:
    设计模式 — 结构型模式 装饰者模式
    设计模式 — 结构型模式 适配器模式
    Java 集合 — HashMap
    在Linux(centos)上安装PHP的mongodb扩展 成功试过的
    linux一些硬件详情查看的高级方法(网卡,内存,硬盘,cpu)
    CentOS系统环境下安装MongoDB
    CentOS+Apache+php无法访问redis的解决方法 Redis server went away
    如何解决linux下apache启动时httpd: apr_sockaddr_info_get() failed for 报错
    修改mysql root密码
    win7下 sublime text2操作快捷键
  • 原文地址:https://www.cnblogs.com/masami521/p/4724364.html
Copyright © 2011-2022 走看看