加载多个本地映像,无内存警告

时间:2012-02-13 19:06:23

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

好吧,记忆管理让我发疯了!

这是我的问题:

我有一个带有n个参考图像的plist。 我正在尝试做的是抓住每个孩子并将其加载到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个图像时,此代码会使应用程序收到内存警告。

我想你明白了,对吧?

有什么建议吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

如果您想避免内存问题,则不应仅在需要时将它们全部加载。为此,您可以按照apple here提供的示例进行操作。

基本上,你所做的只是加载三张图片:现在正在显示的图像以及放置在右侧和左侧的图像。然后,当你滚动时,让我们说向右,你删除了之前在左侧的那个,并在右端放置一个新的图像。