文档章节

使用 SDWebImageDownloader 过程中遇到的问题小结

木木情深
 木木情深
发布于 2015/06/16 11:39
字数 444
阅读 35
收藏 0
点赞 0
评论 0

问题一、      

业务场景:设定imageView进行网络图片加载的过程中,默认图片为imageA,加载失败图片为imageB    

问题:      imageView的图片或者为imageA,没有如期的显示为失败图片iamgeB    

代码分析:有的时候图片的url是正确的,但是网络请求的ReceiveData的总长度为0,导致image为nil。

解决方案:添加红色标注的位置,即可轻松解决问题。

- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection

{

    self.connection = nil;


    [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:nil];


    if ([delegate respondsToSelector:@selector(imageDownloaderDidFinish:)])

    {

        [delegate performSelector:@selector(imageDownloaderDidFinish:) withObject:self];

    }


    if ([delegate respondsToSelector:@selector(imageDownloader:didFinishWithImage:)])

    {

        if (imageData.length == 0) {

            if ([delegate respondsToSelector:@selector(imageDownloader:didFailWithError:)])

            {

                [delegate performSelector:@selector(imageDownloader:didFailWithError:) withObject:self withObject:nil];

            }

            

            self.connection = nil;

            self.imageData = nil;

        }

        UIImage *image = SDScaledImageForPath(url.absoluteString, imageData);

        [[SDWebImageDecoder sharedImageDecoder] decodeImage:image withDelegate:self userInfo:nil];

    }

}

问题二、      

业务场景:设定imageView进行网络图片加载的过程中

问题:      因图片数量过多、size多大造成内存溢出    

代码分析:没有做图片的缩放处理

解决方案:修改SDWebImageDecoder.m 中添加红色所示的方法,即可轻松解决问题。

//从原点开始重新绘图

+ (UIImage *)decodedImageWithImage:(UIImage *)image

{

    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(image.CGImage);

    BOOL imageHasAlphaInfo = (alphaInfo != kCGImageAlphaNone &&

                              alphaInfo != kCGImageAlphaNoneSkipFirst &&

                              alphaInfo != kCGImageAlphaNoneSkipLast);


    UIGraphicsBeginImageContextWithOptions(image.size, !imageHasAlphaInfo, 0);

    CGRect rect = (CGRect){.origin = CGPointZero, .size = image.size};

    [image drawInRect:rect];

    UIImage *decompressedImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();


    return decompressedImage;

}


//缩放

+(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize

{

    // Create a graphics image context

    UIGraphicsBeginImageContext(newSize);

    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];

    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return newImage;

}


© 著作权归作者所有

共有 人打赏支持
木木情深
粉丝 37
博文 186
码字总数 26451
作品 0
广州
程序员
搬好小板凳看SDWebImage源码解析(二)

4>SDWebImageDownloader SDWebImageDownloader是以单例存在,对图片下载管理,进行一些全局的配置。如下: 1).设置最大并发数,下载时间默认15秒,是否压缩图片和下载顺序等。 2).设置opera...

厦大 ⋅ 2017/12/18 ⋅ 0

SDWebImage详细使用

SDWebImage托管在github上。https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征...

xiaobai1315 ⋅ 2016/08/26 ⋅ 0

Android中ZXing简单使用

ZXing是目前用的比较广泛的一个二维码扫描库,扫描快、识别率高,网上有很多关于zxing的简化和使用,这里做一个小结: 1、重写com.mining.app.zxing.view包下面的ViewfinderView类来实现自己...

eclipse_xu ⋅ 2014/09/26 ⋅ 0

第三方库:SDWebImage简单使用

官方接口文档地址:http://cocoadocs.org/docsets/SDWebImage/3.8.1/ SDWebImage 提供了一个支持网络下载图片的UIImageView的分类,主要有以下功能: 为Cocoa Touch框架提供一个UIImageView...

xiaobai1315 ⋅ 2016/09/06 ⋅ 0

iOS常用第三方框架的工作原理

在写iOS项目的过程中,我们经常会用到AFNetworking和SDWebImage这种第三方开源框架,但其工作原理我们大部分人都不怎么清楚,在这里整理一下这两个第三方开源框架的工作原理。 1.介绍 1.AFNe...

北方人在上海 ⋅ 2016/05/30 ⋅ 0

Rails学习小结

学习rails也有一个多月了吧,断断续续地把《Agile web Development with Rails》看完了,看得不是很仔细,有些章节的内容看不懂,也就看得越发的粗糙了。在这个过程里中,简单的写了一些学习...

StevenMeng ⋅ 2013/02/14 ⋅ 0

SDWebImage源码解读(一)

SDWebImage是我们常用的图片缓存加载库,我们有必要对源码进行仔细阅读与学习,以便了解更多SD支持的功能与实现原理,并且在遇到问题时能及时的进行调试解决。我们再阅读之前先自己想想一下,...

智小融 ⋅ 06/04 ⋅ 0

一些生活中遇到的问题小结

安装CentOS 6.5的过程中 问题:进入安装过程提示:you don't have enough RAM to install 解决方法:一开始分配的内存为256M,提示此信息,只要把内存分配为512M或者更大就可以解决 安装Cen...

韩轩辕 ⋅ 2015/07/24 ⋅ 0

记一次Maven的profile文件过滤引起的字符编码BUG

本文记录了一次文件编码差异引起的profile替换占位符失败的bug,及处理思路。记录成文,以便以后反思,或让后来遇到问题的同学能有据可循。 起因及bug描述 相信大家对于Maven中打包不同环境使...

飞来来 ⋅ 2017/11/26 ⋅ 0

Java学习-package与import

前言 命名规范以及命名冲突的解决,一直是我们在编程过程中经常遇到的问题,那么在Java中对命名冲突,是如何采取措施的呢? package 打包 一、作用 使用包,可以解决Java中的命名冲突,类似于...

m18633778874 ⋅ 04/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节...

OSC_cnhwTY ⋅ 42分钟前 ⋅ 0

多线程(四)

线程池和Exector框架 什么是线程池? 降低资源的消耗 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池没有或者减少T1和T3 提高线程的可管理性。 线程池要做些什...

这很耳东先生 ⋅ 50分钟前 ⋅ 0

使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

瑟青豆 ⋅ 今天 ⋅ 0

19.压缩工具gzip bzip2 xz

6月22日任务 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍: linux中常见的一些压缩文件 .zip .gz .bz2 .xz .tar .gz .tar .bz2 .tar.xz 建立一些文...

王鑫linux ⋅ 今天 ⋅ 0

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 今天 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 今天 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 今天 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 今天 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 今天 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部