ScrollView太慢 - 内存管理问题?

时间:2012-04-17 08:54:27

标签: ios xcode memory-management

在我的应用程序中,我使用滚动视图,其中显示300图像(400 kB)。 这需要将近2分钟,因此,当我向上和向下滚动时,它并不顺畅。

我该如何解决这个问题?

注意:我注意到,在向下滚动到一次scrollview结束后,它变得平滑。 滚动问题仅在第一次出现。

3 个答案:

答案 0 :(得分:0)

请勿预先加载所有图像。只需加载要显示的图像和下一个+最后一张图片。

据我所知,您在加载/显示滚动视图时加载所有图像。由于你有很多图像,如果你只加载/拥有三个图像,它将会更快,更省内存。 这将是前一个/左侧显示的图像并且不可见 - 当前显示的和可见的图像以及不可见的下一个/右图像。

因此,如果您向左移动/向左滑动,则基本上将滚动视图向左移动并显示已加载的右图像。在后台,您将加载下一个右侧图像,同时取消分配最左侧的图像。

您始终只能加载最多4张图像。

查看WWDC 2011的无限scrollview示例 - 会话104高级滚动视图,以获得良好的可视化示例和示例代码。

答案 1 :(得分:0)

我认为this会解决您的问题。这个问题可能会给你一些背景信息:

How to reuse/recycle custom element like uitableviewcell does?

答案 2 :(得分:0)

尝试在加载功能(加载图像的位置)中添加此功能。如果您使用while或for循环来加载图像,请将此代码添加到循环中。

NSURL *url=//here url for your image   
dispatch_queue_t currentQueue = dispatch_get_current_queue();
dispatch_queue_t dataConvertorQueue = dispatch_queue_create("Fetching images", NULL);
dispatch_async(dataConvertorQueue, ^{
    NSData *data = [NSData dataWithContentsOfURL:url];
    dispatch_async(currentQueue, ^{
       //replace imageView with your imageView outlet
       imageView.image = [[UIImage alloc] initWithData:data]];
    });
});
dispatch_release(dataConvertorQueue);

此代码可帮助您从网址中获取和显示图像,并且使用tableview可以很好地工作。它可能不是您想要的,但它会让您了解如何做到这一点。希望它会帮助你。