【发布时间】:2015-07-29 12:54:43
【问题描述】:
我在滚动视图(照片库)中显示多个图像时遇到问题。 我已从文档目录中获取图像。当我显示超过 100 张图像时应用程序崩溃。所以我想将图像存储在缓存中。
我想显示前 15 张图像,然后显示缓存中的其他图像。当我滚动 scrollview 时,将显示缓存中的前 15 个,然后将显示下一个。
要求是在scrollview 中显示图像,而不是在collectionView 或其他组件中。
files 是从文档目录中提取的图像路径的 array。
我已获取所有图像路径并存储在files array。
int x=2,y=5;
for (int i = 0; i < files.count ; i++)
{
if(x<=308)
{
NSString *setPath=[NSString stringWithFormat:@"%@/%@",filePath,[files objectAtIndex:i]];
UIImage* imagePath = [UIImage imageWithContentsOfFile:setPath];
imgView=[[UIImageView alloc]initWithFrame:CGRectMake(x, y, 77, 75)];
imgView.image=imagePath;
x+=80;
}
else
{
x=2;
y+=77;
NSString *setPath=[NSString stringWithFormat:@"%@/%@",filePath,[files objectAtIndex:i]];
UIImage* imagePath = [UIImage imageWithContentsOfFile:setPath];
imgView=[[UIImageView alloc]initWithFrame:CGRectMake(x, y, 77, 75)];
imgView.image=imagePath;
x+=80;
}
[gallaryScrollView addSubview:imgView];
[self.view addSubview:gallaryScrollView];
gallaryScrollView.contentSize=CGSizeMake(320, y+120);
}
【问题讨论】:
-
你使用SDWebImage库github.com/rs/SDWebImage。
-
@DharmeshDhorajiya - 我同意如果您需要从 Web 服务异步加载图像并享受缓存,SDWebImage 是一个很棒的工具。但我认为这里的问题更为根本,与其说是缓存问题,不如说是“滚动到视野之外时延迟加载和释放”的问题。而 SDWebImage 并没有解决这个问题。
-
Ravi - 你为什么不想使用集合视图(它只是一个滚动视图,它会自动处理困扰你当前设计的内存问题)?当然,您可以编写
UIScrollViewDelegate方法在图像视图滚动进出视图时添加和删除它们,但您为什么要这样做? -
@Rob - 我同意你的建议,但是当超过 100 张图像时,集合视图崩溃应用程序中会出现同样的问题。
-
好的,然后解决这个问题。可能存在以下两个问题之一:首先,您可能持有
UIImage对象(例如,将它们保存在某个集合中)。你不想那样做。当一个单元被重用时,您要确保丢弃以前与该单元关联的UIImage对象。不要将图像保存在内存中。其次,您可能正在使用高分辨率的图像:例如如果您将 4,000 x 4,000 像素的图像加载到 100x100 图像视图中,则每个图像仍将占用 64mb,除非您手动将图像大小调整为适合单元格的大小。
标签: ios objective-c iphone crash