iOS开发 关于tableView加载图片时出现卡顿时的解决办法
来源:互联网 发布:淘宝卷皮折扣网 编辑:程序博客网 时间:2024/05/17 18:24
新手做开发的时候一般都会遇到使用tableView从网上加载图片并显示图文的时候会有卡顿现象,而这种卡顿现象也是因为多种原因造成的。一般可以分为两种:一种是由于网上加载图片需要动态定义cell的高度(如果是固定的高度,可以忽略),而在定义cell高度的时候一般都会先去下载图片然后再计算图片的大小,进而计算cell的高度。另一种就是在cell显示图片时,没有进行异步处理加载图片与显示的逻辑。
下面进行对上面两种造成卡顿的原因提出我的方法,对于第一种可以进行抓去图片的URL的http头部信息,计算cell高度的时候只去获取图片的大小,而不去下载图片。这样就会免去下载图片这个耗时的过程,而只在cell中显示图片的时候才去真正下载图片。这里给出图片类型为JPG的方法中:
#pragma mark -#pragma mark JPG格式的图片 根据图片部份数据得到图片的size+ (CGSize)downloadJpgImage:(NSString*)strUrl{ NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:strUrl]]; [request setValue:@"bytes=0-209" forHTTPHeaderField:@"Range"]; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; return [self jpgImageSizeWithHeaderData:data];}+ (CGSize)jpgImageSizeWithHeaderData:(NSData *)data{ if ([data length] <= 0x58) { return CGSizeZero; } if ([data length] < 210) {// 肯定只有一个DQT字段 short w1 = 0, w2 = 0; [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)]; [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)]; short w = (w1 << 8) + w2; short h1 = 0, h2 = 0; [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)]; [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)]; short h = (h1 << 8) + h2; return CGSizeMake(w, h); } else { short word = 0x0; [data getBytes:&word range:NSMakeRange(0x15, 0x1)]; if (word == 0xdb) { [data getBytes:&word range:NSMakeRange(0x5a, 0x1)]; if (word == 0xdb) {// 两个DQT字段 short w1 = 0, w2 = 0; [data getBytes:&w1 range:NSMakeRange(0xa5, 0x1)]; [data getBytes:&w2 range:NSMakeRange(0xa6, 0x1)]; short w = (w1 << 8) + w2; short h1 = 0, h2 = 0; [data getBytes:&h1 range:NSMakeRange(0xa3, 0x1)]; [data getBytes:&h2 range:NSMakeRange(0xa4, 0x1)]; short h = (h1 << 8) + h2; return CGSizeMake(w, h); } else {// 一个DQT字段 short w1 = 0, w2 = 0; [data getBytes:&w1 range:NSMakeRange(0x60, 0x1)]; [data getBytes:&w2 range:NSMakeRange(0x61, 0x1)]; short w = (w1 << 8) + w2; short h1 = 0, h2 = 0; [data getBytes:&h1 range:NSMakeRange(0x5e, 0x1)]; [data getBytes:&h2 range:NSMakeRange(0x5f, 0x1)]; short h = (h1 << 8) + h2; return CGSizeMake(w, h); } } else { return CGSizeZero; } }}其他图片的方法可以参照:
对于第二种原因的解决方法就是使用异步加载的方式,当然首先你得知道我们经常用的网络加载图片的库是SDWebImage。另外,如果想进行异步加载图片的话最好自定义cell,数据的加载放在customCell中进行赋值。
异步加载:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [stImgView setImageWithURL:[NSURL URLWithString:strPicUrls]]; [self.retStImageViewBg addSubview:stImgView]; });
1 0
- iOS开发 关于tableView加载图片时出现卡顿时的解决办法
- iOS开发使用tableView从服务器加载图片时的卡顿现象解决方案
- iOS开发使用tableView从服务器加载图片时的卡顿现象解决方案
- iOS tableView的图片缓存异步加载
- 关于TableView中图片的延时加载
- 关于TableView中图片的延时加载
- 关于TableView中图片的延时加载
- 关于TableView中图片的延时加载
- 关于TableView中图片的延时加载
- 关于TableView中图片的延时加载
- 关于TableView中图片的延时加载
- iOS开发中如何解决TableView中图片延时加载
- iOS开发中如何解决TableView中图片延时加载
- iOS开发笔记--异步加载图片在TableView中的应用
- iOS开发中如何解决TableView中图片延时加载
- iOS开发笔记--异步加载图片在TableView中的应用
- iOS开发使用sdWebImage实现对tableView的cell加载图片淡入动画
- iOS开发]优化tableView性能(针对滑动时出现卡的现象)
- CString与char * ,string的互相转换
- json 在java 中的应用
- Java 带参数构造函数
- <学习笔记> html事件(源w3school)
- 第三章:C语言特性
- iOS开发 关于tableView加载图片时出现卡顿时的解决办法
- treeviw的展开属性
- vs打开utf8编码文件
- update-rc.d的具体用法
- 平衡二叉树
- fusetool 里面的 ActivatingAnimation 使用理解
- 处理iOS键盘通知
- Linux 内核list使用
- mysql 点赞取消点赞语句