使用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中添加您的大小检查