由于将图像数量加载到 UIScrollView 时出现内存错误而终止



我在我的应用程序中使用UIScrollView加载图像数量(超过 200 张图像)。

我从磁盘加载图像,然后添加到UIScrollView中。我收到 Xcode 5 错误消息"由于内存错误而终止",并且应用程序意外终止。但并非每次都偶尔发生。

我仍然完全不确定这是内存问题。但是我没有找到内存问题的代码原因。

即使我已经通过仪器工具检查了内存泄漏问题,也没有内存泄漏。

由于对象创建的效率和耗时,我在自定义ACReuseQueue的帮助下为像UITableView这样的UIScrollView创建了自定义的可重用UIView

我已经在scrollViewDidScroll内实现了排队和取消排队的概念:

要将图像添加到UIScrollView中:习惯于以下代码

-(void)imageAdd:(ALAsset *)item
{
__block ImageControl    *imageControl;
imageControl = (ImageControl*)[[ACReuseQueue defaultQueue]       dequeueReusableObjectWithIdentifier:@"ImageControl"];
    [imageControl setAlAsset:item];
    [imageControl setDuration:1.0];
    [imageControl setIsCopy:NO];
    [self.galleryView addItem:imageControl];
    [imageControl release];
}

下面的代码用于当用户滚动滚动视图时

-(void)scrollViewDidScroll:(UIScrollView*)scrollView
{
for (ImageControl *imageControl in self.galleryView.items)
{
    if (CGRectIntersectsRect(imageControl.frame, self.galleryView.bounds))
    {
        imageControl = (ImageControl*)[[ACReuseQueue defaultQueue] dequeueReusableObjectWithIdentifier:@"ImageControl"];

        [self.galleryView addItem:imageControl];

    }
    else
    {
        [imageControl removeFromSuperview];
        [[ACReuseQueue defaultQueue] enqueueReusableObject:imageControl];
    }
}
}

尽管如此,我还是没有像UITableView那样实现可重用UIScrollView

不要同时加载所有图像。无论如何,大多数都不可见。

使用表格视图可能会使您的生活更轻松,并且是仅加载所需图像的最快方法。

如果要使用普通滚动视图,则需要实现 scrollViewDidScroll: delegate 方法,并在用户滚动视图时使用它来添加和删除子视图。

最新更新