ios - 如何使用objective-c将图像存储在缓存中
<p><p>我在 ScrollView (照片库)中显示多个图像时遇到问题。 <strong>我已从文档目录中获取图像。</strong>当我显示超过 100 张图像时<strong>应用程序崩溃</strong>。所以我想将图像存储在缓存中。 </p>
<p>我想显示前 15 张图像,然后显示缓存中的其他图像。当我滚动 <code>scrollview</code> 时,将显示缓存中的前 15 个,然后将显示下一个。</p>
<p>要求是在 <code>scrollview</code> 中显示图像,而不是在 <code>collectionView</code> 或其他组件中。</p>
<p><code>files</code> 是从文档目录中获取的图像路径的 <code>array</code>。</p>
<p>我已获取所有图像路径并存储在 <code>files 数组</code>中。</p>
<pre><code>int x=2,y=5;
for (int i = 0; i < files.count ; i++)
{
if(x<=308)
{
NSString *setPath=];
UIImage* imagePath = ;
imgView=[initWithFrame:CGRectMake(x, y, 77, 75)];
imgView.image=imagePath;
x+=80;
}
else
{
x=2;
y+=77;
NSString *setPath=];
UIImage* imagePath = ;
imgView=[initWithFrame:CGRectMake(x, y, 77, 75)];
imgView.image=imagePath;
x+=80;
}
;
;
gallaryScrollView.contentSize=CGSizeMake(320, y+120);
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>缓存不会解决您的内存问题。 (如果有的话,使用额外的内存缓存只会给应用程序带来更多的内存压力。)您使用缓存是出于性能原因,而不是为了减少内存使用量。</p>
<p>问题是您正试图将 ImageView 加载到前面的 ScrollView 中。我建议对 ImageView 及其相关图像进行延迟加载。而不是分批进行 15 个(或其他),我建议在您的 <a href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/index.html" rel="noreferrer noopener nofollow"><code>UIScrollViewDelegate</code></a> 中动态进行。方法:</p>
<ul>
<li><p>为 ScrollView 设置 <code>delegate</code>; </p></li>
<li><p>实现 <code>scrollViewDidScroll</code> 这将:</p>
<ul>
<li><p>从 ScrollView 中移除不可见(或至少不可见)的所有 ImageView </p></li>
<li><p>添加任何已滚动到 View 中的 ImageView 并设置其 <code>image</code> 属性</p></li>
</ul></li>
</ul>
<p>如果出于性能原因您想将此与 <code>NSCache</code> 结合使用以进行缓存,您可以根据需要这样做,但我建议首先关注主要的手动 ScrollView 委托(delegate)实现。</p></p>
<p style="font-size: 20px;">关于ios - 如何使用objective-c将图像存储在缓存中,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/31701011/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/31701011/
</a>
</p>
页:
[1]