【问题标题】:UIImage return nil on some images?UIImage 在某些图像上返回 nil?
【发布时间】:2011-05-18 19:33:01
【问题描述】:

我的应用中有大约 500 张图片作为资源。

首先,这是一件坏事吗?我还能如何存储它们?

其次,当我按如下方式加载它们时:

for (int i=0; i < [imageArray count]; i ++)
{
    IngredientObject * o = ((ImageObject*)[imageArray objectAtIndex:i]);
    UIImage * img = [UIImage imageNamed:o.imageName];
    .
    .
    .
}

有时它会返回 nil。我假设这是一个内存问题,因为它不会发生在模拟器上,只会发生在真实设备上。每张图片都很小……每张大约 10k 到 20k,但最终还是大约 10meg。我认为这在 16gb 设备上不是问题。

最好不要使用 imageNamed: 并使用 imageWithContentsOfFile 或其他方法。这些图像最终位于 UIScrollerView 中,我不确定如何根据需要加载它们,因为如果它必须动态加载图像,我担心滚动性能。

感谢任何帮助。

谢谢

【问题讨论】:

    标签: iphone ipad ios4 xcode4


    【解决方案1】:

    拥有 500 多张图片不一定是坏事,只要您正确处理内存管理即可。根据我的经验,imageWithCOntentsOfFile: 似乎比 imageNamed: 快很多。

    UIScrollView 的性能而言,一次只处理几张图像将确保您的滚动不会延迟或生涩。

    就 10MG 与 16GB 设备而言,这完全无关紧要。 iPhone 3GS 有大约 128MB 的免费内存; iPhone 4 大约有 300MB 以上,这取决于您在后台运行的内容。

    您似乎正在尝试将所有 500 张图像加载到 ScrollView 中,这可能是您得到空图像导致内存不足的原因。

    【讨论】:

    • 那么您的建议是更改为 imageWithContentsOfFile 并在图像进入视图时将其动态加载到滚动视图中?
    • 是的,我会先尝试,然后运行 ​​Leaks 以查看您的内存去向。对我来说,imageWithContentsOfFile: 似乎在我的图像数量较少但文件大小要大得多的情况下工作。
    • 任何想法,我可能会找到有关如何在滚动视图上动态加载图像的示例。我猜我想在它们离屏幕两三个索引时加载它们。
    • 有很多例子可用,google.com/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    相关资源
    最近更新 更多