文档章节

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

木木情深
 木木情深
发布于 2015/06/16 11:39
字数 444
阅读 38
收藏 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
博文 189
码字总数 26451
作品 0
广州
程序员
私信 提问
SDWebImage源码解读(二)

今天总计一下SDWebImage核心模块之下载模块。下载模块主要包括两个类SDWebImageDownloader和SDWebImageDownloaderOperation。其中SDWebImageDownloader负责对所有下载任务的管理,SDWebImag...

智小融
07/02
0
0
搬好小板凳看SDWebImage源码解析(二)

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

厦大
2017/12/18
0
0
iOS 图片加载框架SDWebImage详解

目的 在使用SDWebImage加载图片时,尤其是加载gif等大图时,SDWebImage会将图片缓存在内存中,这样是非常吃内存的,这时我们就需要在适当的时候去释放一下SDWebImage的内存缓存,才不至于造成...

FBY展菲
2017/10/31
0
0
第三方库:SDWebImage简单使用

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

xiaobai1315
2016/09/06
33
0
SDWebImage详细使用

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

xiaobai1315
2016/08/26
9
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL主从配置——双主

MySQL主从配置——双主 本人是测试环境,准备了两台安装好mysql的服务器(masterA和masterB),可以保证没数据写入,否则需要先将两台服务器上的数据一致,然后再进行主从配置,步骤是:先m...

弓正
18分钟前
7
0
centos下如何使用 beyond compare 对比工具

我这里的环境是centos7桌面版 三条命令安装beyond compare wget http://www.scootersoftware.com/bcompare-4.2.3.22587.x86_64.rpmrpm --import http://www.scootersoftware.com/RPM-GPG-K......

linuxprobe16
22分钟前
5
0
http协议请求头的意义

GET /day31_Http_306/index.jsp HTTP/1.1: GET请求,请求服务器路径为/hello/index.jsp,协议为1.1 请求头 1.Host:localhost:请求的主机名为localhost2.User-Agent:Mozilla/5.0(Windows NT......

潇潇程序缘
59分钟前
9
0
Netty 简单服务器 (三)

经过对Netty的基础认识,设计模型的初步了解,来写个测试,试试手感 上篇也说到官方推荐我们使用主从线程池模型,那就选择这个模型进行操作 需要操作的步骤: 需要构建两个主从线程组 写一个服务器...

_大侠__
今天
15
0
day02:管道符、shell及环境变量

1、管道符:"|" 用于将前一个指令的输出作为后一个指令的输入,且管道符后面跟的是命令(针对文档的操作):cat less head tail grep cut sort wc uniq tee tr split sed awk等) [root@localho...

芬野de博客
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部