gpt4 book ai didi

ios - 如何使用 objective-c 将图像存储在缓存内存中

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:44 25 4
gpt4 key购买 nike

当在 ScrollView (照片库)中显示多个图像时,我遇到了问题。 我已从文档目录中获取图像。当我显示超过 100 张图像时应用程序崩溃。所以我想将图像存储在高速缓存中。

我想显示前 15 张图像,然后显示高速缓存中的其他图像。当我滚动 scrollview 时,将显示缓存中的前 15 个,然后显示下一个。

要求是在 scrollview 中显示图像,而不是在 collectionView 或其他组件中显示图像。

files 是从文档目录中获取的图像路径的数组

我已获取所有图像路径并存储在文件数组中。

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);
}

最佳答案

缓存不会解决您的内存问题。 (如果有的话,使用额外的内存缓存只会给应用程序带来更多的内存压力。)您使用缓存是出于性能原因,而不是为了减少内存使用。

问题是您正试图将 ImageView 加载到前面的 ScrollView 中。我建议延迟加载 ImageView 及其相关图像。与其分批进行 15 次(或其他),我建议在您的 UIScrollViewDelegate 中动态进行方法:

  • 为您的 ScrollView 设置委托(delegate)

  • 实现 scrollViewDidScroll 它将:

    • 从 ScrollView 中移除任何不可见(或接近,至少)的 ImageView

    • 添加任何已滚动到 View 中的 ImageView 并设置其 image 属性

如果出于性能原因,你想将它与 NSCache 结合起来进行缓存,你可以根据需要这样做,但我建议首先关注主要的手动 ScrollView 委托(delegate)实现。

关于ios - 如何使用 objective-c 将图像存储在缓存内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31701011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com