加载图片的两个方法:

  • [UIImage imageNamed:]
  • [[UIImage alloc] initWithContentsOfFile: imgpath]

[UIImage imageNamed:] : 加载的图片会自动缓存到内存中,不适合加载大图,内存紧张的时候可能会移除图片,需要重新加载,那么在界面切换的时候可能会引起性能下降

[[UIImage alloc] initWithContentsOfFile: imgpath]:加载图片,但未对图片进行解压,可以提前进行解压,提升加载速度.

    //异步加载图片
CGSize imgViewS = imgView.bounds.size;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{ NSInteger index = indexPath.row;
NSString*imgpath = _imagePaths[index]; //绘制到context 提前解压图片
UIImage *img = [[UIImage alloc] initWithContentsOfFile: imgpath];
UIGraphicsBeginImageContextWithOptions(imgViewS , false, );
//这里也可以对图片进行压缩
[img drawInRect:CGRectMake(, , imgViewS.width, imgViewS.height)];
img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//模拟延迟加载
[NSThread sleepForTimeInterval:]; dispatch_async(dispatch_get_main_queue(), ^{
//加载当前cell对应的图片
if (cell.tag == index) {
imgView.image = img;
NSLog(@"加载图片。。。。");
} });

二.由于每次加载都需要解压,每次解压都需要消耗内存,所以可以利用NSCahe缓存好加载过的图片

/**
利用NSCache缓存图片 */
- (UIImage*)loadImageIndex:(NSInteger)index {
static NSCache *cache = nil;
if (cache == nil) {
cache = [[NSCache alloc] init];
//最大缓存
// [cache setCountLimit:1024];
//每个最大缓存
// [cache setTotalCostLimit:1024];
}
UIImage *img = [cache objectForKey:@(index)];
if (img) {
return [img isKindOfClass:[NSNull class]]?nil:img;
}
//设置占位,防止图片多次加载
[cache setObject:[NSNull null] forKey:@(index)]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{ NSString *imgpath = self.imagePaths[index];
UIImage *loadimg = [UIImage imageWithContentsOfFile:imgpath];
//渲染图片到contenx
UIGraphicsBeginImageContextWithOptions(loadimg.size, false, );
[loadimg drawAtPoint:CGPointZero]; loadimg = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
dispatch_async(dispatch_get_main_queue(), ^{
//缓存图片
[cache setObject:loadimg forKey:@(index)]; NSIndexPath *indexpath = [NSIndexPath indexPathForRow:index inSection:];
UICollectionViewCell *cell = [self.collectView cellForItemAtIndexPath:indexpath];
if (cell != nil) {
UIImageView*imgV = [cell.contentView viewWithTag:];
imgV.image = loadimg;
} });
});
//未加载
return nil;
}

关于UIImageView缓存加载的笔记的更多相关文章

  1. Android批量图片加载经典系列——afinal框架实现图片的异步缓存加载

    一.问题描述 在之前的系列文章中,我们使用了Volley和Xutil框架实现图片的缓存加载(查看系列文章:http://www.cnblogs.com/jerehedu/p/4607599.html# ...

  2. Expo大作战(十三)--expo如何自定义状态了statusBar以及expo中如何处理脱机缓存加载 offline support

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  3. UIImageView异步加载网络图片

    在iOS开发过程中,经常会遇到使用UIImageView展现来自网络的图片的情况,最简单的做法如下: 去下载https://github.com/rs/SDWebImage放进你的工程里,加入头文件# ...

  4. ios UIImageView异步加载网络图片

    方法1:在UI线程中同步加载网络图片 UIImageView *headview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 4 ...

  5. unity3d 加密资源并缓存加载

    原地址:http://www.cnblogs.com/88999660/archive/2013/04/10/3011912.html 首先要鄙视下unity3d的文档编写人员极度不负责任,到发帖为止 ...

  6. android 中使用缓存加载数据

    最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 废话不多说,上代码 欢迎转载,但请保留文章原始出处:)  博客 ...

  7. Android 开发 图片网络缓存加载框架Fresco

    简介 Fresco是一个在Android应用程序中显示图像的强大系统. Fresco负责图像的加载和显示.它将从网络.本地存储或本地资源加载图像,图像加载完成前会显示一个占位图片.它有两个级别的缓存: ...

  8. u3d 加密资源并缓存加载

    // C# Example // Builds an asset bundle from the selected objects in the project view. // Once compi ...

  9. ios UIImageView异步加载网络图片2

    //1. NSData dataWithContentsOfURL // [self.icon setImage:[UIImage imageWithData:[NSData dataWithCont ...

随机推荐

  1. grandle Project sync failed.please fix your project and try again

    Android Studio导入项目或者新建项目想运行的时候可能会报错Gradle project sync failed. Please fix your project and try again ...

  2. 性能优化中CPU、内存、磁盘IO、网络性能的依赖

    系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上 ...

  3. sql server exec 参数的传递

    来源:https://www.cnblogs.com/guohu/p/11142991.html 1 :普通SQL语句可以用exec执行 Select * from tableName exec('s ...

  4. 几个支持 FreeSWITCH 的网络电话的安装与使用(linphone、MicroSIP、Sipdroid)

    Ubuntu 安装 Linphone 安装命令 apt-get install linphone 安装完成后,在应用程序 --> 互联网 下就能看到 linphone,打开后注册 注意:linp ...

  5. Spring cloud微服务安全实战-8-1课程总结

    总结 首先讲了api的安全.安全常见的风险.安全措施.然后我们把简单的api演化成一个这种微服务的架构. 首先讲了在网关上可以做哪些安全的措施.然后讲了如何搭建一个安全中心,也就是认证服务器,包括一些 ...

  6. Jmeter-Critical Section Controller(临界区控制器)(还没看,是一个控制请求按顺序执行的东东)

    The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will ...

  7. git让线上代码强制覆盖本地的

    git强制覆盖本地命令(分步执行): git fetch --all    git reset --hard origin/master    git pull git强制覆盖本地命令(单条执行):  ...

  8. 导入一个eclipse的java项目到IDEA报Cannot find JDK '1.7' for module 'TEST'

    解决办法: 右键你的项目--------------->OPen module settings 将dependencies里面的module sdk改成你安装的java版本就可以了(比如我电脑 ...

  9. [LeetCode] 639. Decode Ways II 解码方法 II

    A message containing letters from A-Z is being encoded to numbers using the following mapping way: ' ...

  10. [LeetCode] 655. Print Binary Tree 打印二叉树

    Print a binary tree in an m*n 2D string array following these rules: The row number m should be equa ...