iOS图片下载有一个很好的第三方框架,那就是使用非常广泛的SDWebImage,这里给大家介绍的是iOS原生的系统下载图片的方法。以后再介绍一下SDWebImage的使用。
新建一个文件ImageDownloadDelegate继承自NSObject,我们将图片下载的方法封装在这个文件中。
.h文件:

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>@protocol ImageDownloadDelegate <NSObject>//声明一个协议,代理对象执行协议方法时讲参数传递过去
- (void)imageDownloadDidfinishDownloadImage:(UIImage *)image;@endtypedef void(^ImageDownloadBlock) (UIImage *image);@interface ImageDownloader : NSObject//声明一个代理属性
@property (nonatomic, weak)id<ImageDownloadDelegate> delegate;//声明一个block属性
@property (nonatomic, copy)ImageDownloadBlock block;@property (nonatomic, strong)NSURLResponse *response;
@property (nonatomic, strong)NSError *error;#pragma mark --动态方法--
//异步
- (void)downloadImageWithURL:(NSString *)urlString;#pragma mark --静态方法--
//同步下载图片
+ (UIImage *)downloadImageWithURL:(NSString *)urlString;//异步下载图片
//代理
+ (void)downloadImageWithURL:(NSString *)urlString delegate:(id<ImageDownloadDelegate>)delegate;//block
+ (void)downloadImageWithURL:(NSString *)urlString block:(ImageDownloadBlock)block;
@end

.m文件:

#import "ImageDownloader.h"@implementation ImageDownloader- (void)downloadImageWithURL:(NSString *)urlString{NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {UIImage *image = [UIImage imageWithData:data];self.response = response;self.error = connectionError;//代理和block任选一种
//        if (_delegate &&[_delegate respondsToSelector:@selector(imageDownloadDidfinishDownloadImage:)]) {//            [_delegate imageDownloadDidfinishDownloadImage:image];
//        }self.block(image);}];
}+ (UIImage *)downloadImageWithURL:(NSString *)urlString{//创建url对象NSURL *url = [NSURL URLWithString:urlString];//创建请求对象NSURLRequest *request = [NSURLRequest requestWithURL:url];//请求图片NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];UIImage *image = [UIImage imageWithData:data];return image;
}//代理异步请求
+ (void)downloadImageWithURL:(NSString *)urlString delegate:(id<ImageDownloadDelegate>)delegate{NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {UIImage *image = [UIImage imageWithData:data];//如果代理对象不为空,并且代理对象实现了协议方法,才有传递图片的意义if (delegate != nil && [delegate respondsToSelector:@selector(imageDownloadDidfinishDownloadImage:)]) {[delegate imageDownloadDidfinishDownloadImage:image];}}];
}
//block
+ (void)downloadImageWithURL:(NSString *)urlString block:(ImageDownloadBlock)block{NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {UIImage *image = [UIImage imageWithData:data];//block将参数传递出去block(image);}];}
@end

在调用的文件中导入文件、遵循代理并设置属性:

#import "ImageDownloader.h"@interface ViewController ()<ImageDownloadDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
@property (nonatomic, strong)ImageDownloader *idler;
@end

调用:

- (IBAction)imageDownloader:(id)sender {//同步//_imgView.image = [ImageDownloader downloadImageWithURL:IMG_URL];//    异步:代理[ImageDownloader downloadImageWithURL:IMG_URL delegate:self];//异步:block
//    [ImageDownloader downloadImageWithURL:IMG_URL block:^(UIImage *image) {//        _imgView.image = image;
//
//    }];self.idler = [[ImageDownloader alloc]init];[self.idler downloadImageWithURL:IMG_URL];//self.idler.delegate = self;__weak typeof(self) temp = self;self.idler.block = ^(UIImage *image){temp.imgView.image = image;};}//实现协议方法(获取参数)
- (void)imageDownloadDidfinishDownloadImage:(UIImage *)image{_imgView.image = image;NSLog(@"%@", self.idler.response.MIMEType);
}

Objective-C系统原生图片下载方法封装相关推荐

  1. 最新仿悬赏猫任务平台完整系统源码下载+可封装APP

    正文: 最新仿悬赏猫任务平台完整系统源码下载+可封装APP,新UI的,这前端UI没得说,很好看的. 服务器搭建环境:Linux+Centos7.0以上+宝塔,如果你是虚拟主机的话,那是无法搭建的,亲测 ...

  2. JEPG图片下载方法

    JEPG图片/图标下载方法 目标功能:能够更新指定大小的图片到屏幕上的指定位置. 目前迪文T5UID1(D3)的屏幕是支持区域图片(.JPEG格式)通过串口下载进行更新到指定的坐标位置,通过给系统变量 ...

  3. 一种基于STM32F4的字库及图片下载方法

    一 .概述 目前,越来越多的应用需要扩展外部的Flash来满足存储需求,在调试及批量生产的过程中,需要对外扩的Flash进行烧录操作.在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数 ...

  4. 七牛云测试域名过期了,全部图片下载方法

    测试域名过期了 空间里的图片怎么办? 相信同学看到这篇文章也遇到了坑!测试域名过期,外链地址无法用,文件还不让下载,很是焦灼. 淡定!这种情况可以找客服,找客服,找客服,提工单,提工单,提工单. 链接 ...

  5. php接口下载图片,php图片下载方法

    热度345℃ $url = "http://www.bac.com/1.gif"; getImage($url,'./'); function getImage($url,$pat ...

  6. 分享免费的主流电商平台商品图片批量下载方法

    最近一个新入行的微商MM找我帮忙,她正在优选商品,让我帮她下载她所看上的某巴巴和某宝上的每个商品的图片,基本需求是:看上哪个商品,就批量把该商品的所有介绍图片下载回来进行二次筛选处理. 需求不复杂,但 ...

  7. json 数据 下载为.csv表格方法封装

    @下载方法封装 /** @file 下载功能* @author whyme23@163.com */const jsonToExcelConvertor = (jsonData, title, fil ...

  8. 联想原生系统恢复工具F11 安装方法

    因为种种原因,联想笔记本或电脑被二次格式化分区重装系统,导致丢失原生恢复系统恢复工具(F11),即菜单启动F11变成了F12按钮.即原正版授权变成了盗版系统,想恢复原生系统,官方其实提供了方法. 联想 ...

  9. win7系统待机模式下如何分配下载方法

    提到待机,就不得不说一下,Win7系统中引入了"睡眠"模式.电脑在"睡眠"状态时,内存以 外其他配件的电源均被切断,工作状态保存在内存中.这样在重新唤醒电脑时, ...

最新文章

  1. [转]Docker基础-使用Dockerfile创建镜像
  2. java 新浪天气预报接口_根据新浪天气API获取各地天气状况(Java实现)
  3. 宜信创始人唐宁:技术到处都是,关键看怎么用
  4. 用.NET 2.0压缩解压功能处理大型数据
  5. 安装 Git ( Windows、linux、Mac)
  6. adb android源码分析,Android Adb 源码解析(base on Android 9.0)
  7. Qt文档阅读笔记-Qt插件DECLARE_INTERFACE METADATA INTERFACES官方解析及实例
  8. python sublime 提示补全_【原创】Sublime+Verilator建立强大的verilog编写环境
  9. 好消息,scott的asp.net 2.0数据导航系列全部出版了
  10. UVALive - 7147 (数学)
  11. Linux 查看网卡配置速率
  12. 佳博打印机如何设置热敏打印
  13. vue播放flv格式视频
  14. 常用数字音频功放芯片-音频放大器
  15. 益智java单词游戏_java实现单词搜索迷宫游戏
  16. GIC通用中断控制器
  17. 前端Web工程师学习路线
  18. Mybatis学习笔记_5、Mybatis动态SQL
  19. html wap广告代码,手机wap底部悬浮JS广告代码
  20. 我与网管师职业认证的钦定缘分

热门文章

  1. Python爬虫 从小白到高手 各种最新案例! Urllib Xpath JsonPath BeautifulSoup
  2. mysql报错2052_mysql常用错误代码和消息
  3. vue3项目创建及请求配置
  4. matlab扩频通信系统仿真,基于MATLAB的扩频通信系统仿真研究
  5. Netally公司的EtherScope nXG便携式网络分析测试仪
  6. 物联卡中心:物联卡资费是一样的吗?移动物联卡资费标准!
  7. 数据仓库规范建设指南
  8. Folx Pro for Mac(下载工具)中文版
  9. 机器学习中的数学——模拟退火算法(Simulated Annealing,SA)
  10. python 操作微信闪电贷款_用Python表演马老师的闪电五连鞭!