【问题标题】:ScrollView too slow – Memory management issue?ScrollView 太慢 – 内存管理问题?
【发布时间】:2012-04-28 14:33:31
【问题描述】:

在我的应用程序中,我使用滚动视图显示 300 张图像 (400 kB)。 花了将近2分钟,结果我上下滚动的时候不流畅。

我该如何解决这个问题?

注意:我注意到在我向下滚动到滚动视图的末尾一次后,它变得平滑了。 滚动问题仅在第一次出现。

【问题讨论】:

  • 您的问题与内存管理有什么关系?您是否尝试过分析应用程序?

标签: ios xcode memory-management


【解决方案1】:

尝试在您的加载函数(加载图像的位置)中添加它。如果您使用 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);

此代码可帮助您从 url 获取和显示图像,并且与 tableview 配合使用非常好。它可能不是你想要的,但它会给你一个关于如何去做的想法。希望对你有帮助。

【讨论】:

    【解决方案2】:

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

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

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

    在任何时候,您最多只能加载 4 张图片。

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

    【讨论】:

    • 你能解释更多吗?我不太明白。
    【解决方案3】:

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

    How to reuse/recycle custom element like uitableviewcell does?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2011-01-07
      • 2016-10-20
      相关资源
      最近更新 更多