【问题标题】:Load multiple local images without memory warning加载多个本地图像而没有内存警告
【发布时间】:2012-02-13 19:06:22
【问题描述】:

嗯,内存管理让我发疯!

这是我的问题:

我有一个 plist,其中包含 n 个对图像的引用。 我只是想做的是抓住每个孩子并将其加载到 UIImageView 至极,然后将其添加到启用分页的 UIScrollView。

我的问题:

  • 我有 n 张图片。可能只有 3 个,但可能是 60 个或更多。
  • 每张图片都具有相当大的分辨率 (1152x1536),因为它可以缩放。

我阅读了 CATiledLayer,并看到了 PhotoScroller 示例,但我想避免使用 CATiledLayer,因为它在显示图像片段时会产生淡入淡出,而在我的项目中,这种效果不适合。

我只是想听听你的意见,你通常如何解决这种任务?

我将在这里留下一段代码:

UIImage * image;
UIImageView * imageview;

for (int i = 0; i < [data count]; i++)
{
    image = [[UIImage alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",
                                                     [[NSBundle mainBundle] bundlePath],
                                                     [[data objectAtIndex:i] objectForKey:@"content"]]];

    [content addObject:image];

    imageview = [[UIImageView alloc] initWithImage: [content objectAtIndex:i] ];
    [imageview setTag:i+10];
    imageview.frame = CGRectMake(1024 * i, 0, 1024, 768);

    [scroll addSubview: imageview];

    [imageview release];
    [image release];
}

[scroll setContentSize:CGSizeMake(1024*[data count], 768)];

例如,当我尝试加载 60 张图片时,此代码会使应用收到内存警告。

我想你明白了吧?

有什么建议吗?

提前感谢您的帮助!

【问题讨论】:

    标签: objective-c memory-management uiscrollview uiimage memory-warning


    【解决方案1】:

    如果你想避免内存问题,你不应该一次加载它们,只有在需要它们时才加载它们。要做到这一点,您可以按照苹果提供的示例here

    基本上,您所做的只是加载三张图片:一张现在正在显示,另一张放在右侧和左侧。然后,当您滚动时,假设向右滚动,您将删除之前位于左侧的图像并在右端放置一个新图像。

    【讨论】:

    • 真的谢谢大佬,我试试看,稍后回来告诉你我做了什么!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多