使用SDWebImage处理非常大的图像的下载

我使用SDWebImage将图像asynchronous下载到我的UIImageView 。 大部分收到​​的图像都是可以接受的大小,并且可以很容易地下载,并设置为UIImageView

然而,有时候,URL上的源图像的分辨率非常高(相对于我的imageView的大小 – 60×60)。 在这种情况下,图像从未设置。 有时,我的应用程序崩溃,有时,没有任何反应(图像保持nil ),并在一个非常罕见的情况下,我收到了一个错误,如: Unable to allocate 400000 bytes of memory (我不完全确切的错误日志,我道歉) 。

例如,来自Pinterest网站的pinterest图标本身就是巨大的(10000 x 10000)。 我的imageView永远不能绘制这个图像。 目前,我已经硬编码来replace这个图像,但我知道这是不好的做法。 而且,这仅仅是一种情况,可能会有更多的图像,例如这可能会影响用户体验。

我如何处理这种情况?

只要检查您收到的图像的大小,当尺寸远远大于您的图像视图可以接受,那么你可以调整图像的大小,这里链接调整图像链接的大小。 resize后,你可以把它放在imageview中。 希望对你有帮助。

我build议你使用这个AsyncImageView 。 我用它,它创造奇迹。 要调用这个API:

 ASyncImage *img_EventImag = alloc with frame; NSURL *url = yourPhotoPath; [img_EventImage loadImageFromURL:photoPath]; [self.view addSubView:img_EventImage]; 

和使用UIImageView一样。 简单,它为你做了大部分的事情。 AsyncImageView在UIImageView上同时包含一个简单的类别,用于在iOS上asynchronous加载和显示图像,以便它们不lockingUI,以及用于更高级function的UIImageView子类。 AsyncImageView与URL一起使用,因此可以与本地或远程文件一起使用。

加载/下载的图像caching在内存中,并在发生内存警告时自动清除。 AsyncImageView独立于UIImagecaching运行,但默认情况下,位于应用程序捆绑包根目录中的任何图像都将存储在UIImagecaching中,从而避免重复caching的图像。

该库还可以用来独立于UIImageView加载和caching图像,因为它提供对底层加载和caching类的直接访问。

SDWebImage是开源的库。 将源代码添加到您的项目中,并在SDWebImageDownloader.m中添加您的大小检查