今天要在UIImageView中显示网络的图片,因为UIImageView自身就可以读取网络图片,所以,最简单的做法是:
- (void)viewDidLoad
{
[super viewDidLoad];
self.tv_headPic = [[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)] autorelease];
self.tv_headPic.layer.masksToBounds = YES;
self.tv_headPic.layer.cornerRadius = 5.0f;
[self.tv_headPic setBackgroundColor:[UIColor grayColor]];
[self.view addSubview:self.tv_headPic];
NSURL *imageUrl = [NSURL URLWithString:HEADIMAGE_URL];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
self.tv_headPic.image = image;
}
这是最简单的,但是由于在主线程中加载,会阻塞UI主线程。所以可以试试NSOperationQueue,一个NSOperationQueue操作队列,就相当于一个线程管理器,而非一个线程。因为你可以设置这个线程管理器内可以并行运行的的线程数量等等。
下面就是使用NSOperationQueue实现子线程加载图片:
- (void)viewDidLoad
{
[super viewDidLoad];
operationQueue = [[NSOperationQueue alloc] init];
self.tv_headPic = [[[UIImageView alloc] initWithFrame:CGRectMake(110, 50, 100, 100)] autorelease];
self.tv_headPic.layer.masksToBounds = YES;
self.tv_headPic.layer.cornerRadius = 5.0f;
[self.tv_headPic setBackgroundColor:[UIColor grayColor]];
[self.view addSubview:self.tv_headPic];
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImage) object:nil];
[operationQueue addOperation:op];
}
- (void)downloadImage
{
NSURL *imageUrl = [NSURL URLWithString:HEADIMAGE_URL];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
self.tv_headPic.image = image;
}
不过这也不是最好的设计,因为虽然是异步加载,但是没有缓存图片。重新加载时又要重新从网络读取图片,所以可以考虑保存图片。
1、建立本地缓存目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
diskCachePath = [[[paths objectAtIndex:0] stringByAppendingPathComponent:@"ImageCache"] retain];
if (![[NSFileManager defaultManager] fileExistsAtPath:diskCachePath]) {
NSError *error = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:diskCachePath
withIntermediateDirectories:YES
attributes:nil
error:&error];
}
2、保存在本地,接着可以用图片名称或者URL或者hash过后的值作为key(本地文件名),写入到本地,我比较喜欢用MD5一下图片url作为文件名保存。
if (![[NSFileManager defaultManager] fileExistsAtPath:localPath]) {
[[NSFileManager defaultManager] createFileAtPath:localPath contents:localData attributes:nil];
}
下载图片前先判断是否已经缓存了,已经缓存了就不要再去下载了。
分享到:
相关推荐
来源: github/WKWebImage ... 安装: pod 'WKWebImage' 并 #import "WKWebImage.h" 异步加载图片 包含以下四种设置方法: // 异步加载图片 - (void)wk_setImageWithURL:(NSURL *)url; // 加载 + 设置placeholder -
这是一个第三方图片异步加载库SDWebImage,Github地址为:https://github.com/rs/SDWebImage,这个库主要实现了为UIImageView添加一个类别方法,让使用者使用图片异步加载就好像直接为UIImageView设置image一样,...
1.为UIImageView加载网络图片,为Cocoa Touch框架提供缓存管理。 2.异步图片下载 3.异步内存+磁盘图片缓存,自动缓存过期处理。 4.确保同一个url不会被加载很多次 5.确保虚假url不会被重复提交很多次
可以轻松的处理网络图片加载的问题,进行异步的加载。
帮助异步加载图像并存储本地文件缓存。 特征 异步加载图像。 缓存基于本地文件。 如何使用 导入DPImageCache.swift 像这样的简单代码: let imgAddress = " http://blabla.com/blabla.png " imgView. ...
异步图像该项目演示了如何在 SwiftUI 中异步加载图像。 用法: // Image URLs to loadlet posters = [ " https://image.tmdb.org/t/p/original/pThyQovXQrw2m0s9x82twj48Jq4.jpg " , " ...
UIImageView、UIButton异步加载图片,及更多图片文件操作
SDWebImage使用——一个可管理远程图片加载的类库 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。
在iOS的图片加载框架中,...1.提供了一个UIImageView的category用来加载网络图片并且对网络图片的缓存进行管理 2.采用异步方式来下载网络图片 3.采用异步方式,使用内存+磁盘来缓存网络图片,拥有自动的缓存过期处理
UIImageView,UIButton,MKAnnotationView的功能类别,用于添加Web图像和缓存管理异步图像下载程序,具有自动缓存过期处理功能的异步内存+磁盘图像缓存,背景图像解压缩以避免帧速率下降渐进图像加载(包括动画加载...
在使用SDWebImage加载图片时,尤其是加载gif等大图时,SDWebImage会将图片缓存在内存中,这样是非常吃内存的,这时我们就需要在适当的时候去释放一下SDWebImage的内存缓存,才不至于造成APP闪退。 SDWebImage 提供...
这是一个第三方图片异步加载库SDWebImage,Github地址为:https://github.com/rs/SDWebImage,这个库主要实现了为UIImageView添加一个类别方法,让使用者使用图片异步加载就好像直接为UIImageView设置image一样,...
它是从Objective-C网络图像加载框架和中学到的,为Swift带来了许多高性能的功能。它可能对您来说是一个更好的选择。 Longinus的目标是成为Swift上性能最高的Web图像加载框架。 特征 异步图像下载和缓存。 预加载...
图片瀑布流显示,向上拖拽加载更多,自定义UIImageView类,可以自定义按需扩充。稍加修改可以实现异步加载。 第一次上传iOS源码,主要还是学习,免积分下载,如有BUG和不妥的地方,请不吝赐教。
UIImageView-AsyncLoad ======================= UIImageView + AsyncLoad是UIImageView的扩展,用于在iOS上异步加载和显示图像。 开发人员将拥有一个轻松的环境,无需做很多工作即可在imageview上显示远程图像,更...
这是一个第三方图片异步加载库SDWebImage,Github地址为:https://github.com/rs/SDWebImage,这个库主要实现了为UIImageView添加一个类别方法,让使用者使用图片异步加载就好像直接为UIImageView设置image一样,...
这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。 使用示范的代码:
提供UIImageView , UIButton , MKAnnotationView的分类,用于加载网络图片,并进行缓存管理; 初步方式来下载网络图片 异步方式: memory (内存)+ disk (磁盘)来缓存网络图片,自动管理缓存; 后台图片解码,...
概要:封装轮播图,混合加载网络图片和本地图片,实现UIImageView、UILabel的复用,使用内存缓存,磁盘缓存、多线程和runloop解决UI卡顿,定时器等问题。暂时未发现有任何bug,如果您遇到bug希望你能Issues我。 ...
ImageLoader是用于异步图像加载的工具。 它是适用于 iOS 的轻量级快速图像加载器。 特征 UIImageView 类别的简单方法。 缓存模块可以自行设置。 加载图像由 ImageLoader 处理,而不是 UIImageView。 易于从其他...