2

我正在显示许多直接从我的应用程序加载的图像(未下载)。第一次滚动时,我的表格视图很慢。在我的所有单元格显示后它变得平滑。我真的不知道为什么。

我在 viewDidLoad 中加载了一组 UIImage。然后在我的 tableview 委托中,我只是在给定的索引路径处获取图像并将其设置为我的单元格的 UIImageView。

你知道我怎样才能提高表现吗?

4

3 回答 3

6

只是为了分享我已经修复并且效果很好我遵循的步骤。

1) 使用 Cell 设置 performSelectorInBAckground 函数作为传递的参数,该函数保存滚动视图或 uiview 以放置许多 iamges。

2) 在后台函数中,使用文件的 imagewithContents 加载从应用程序包或本地文件中存储的图像。

3) 使用此代码将图像设置为 imageView。

    //// Start of optimisation - for iamges to load dynamically in cell with delay , make sure you call this function in performSelectorinBackground./////

    //Setting nil if any for safety
    imageViewItem.image = nil;

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

    dispatch_async(queue, ^{
        UIImage *image = // Load from file or Bundle as you want

        dispatch_sync(dispatch_get_main_queue(), ^{

            //Set the image to image view not, wither cell.imageview or [cell add subviw:imageview later ]
            [imageViewItem setImage:image];
            [imageViewItem setNeedsLayout];
        });
    });

    //// End of optimisation/////

这将动态加载所有图像,并且比以前的缓慢和生涩的行为更平滑地滚动表格视图。

祝一切顺利

于 2014-06-30T07:59:39.377 回答
1

您可以在这里阅读我刚刚提交的答案:

在 cellForRowAtIndexPath 从 CoreData 加载图像会减慢滚动速度

基本思想是使用 Grand Central Despatch 将您的表格视图图像获取代码移动到一个单独的线程,当图像可用时将您的单元格填充回主线程。即使从文件系统将图像加载到内存中存在延迟,您的滚动也会非常流畅。

于 2013-01-31T15:58:51.947 回答
0

我从您的问题中了解到的是,您的图像都已准备就绪,并且它们已加载到 RAM 中(存储在 viewDidLoad 中填充的数组中)。在这种情况下,我想查看 cellForRowAtIndexPath 中的确切代码以提供帮助。我的直觉告诉我,那里正在做一些不应该在主线程上做的事情(正如他所暗示的那样)。问题是 - 如果它只是从 NSArray 中获取(最坏的情况是 O(log(n))),那么你不应该看到性能下降。

我知道您没有下载图像,但我仍然建议在后台线程上执行任何非 UI 操作。我写了一些可以帮助你的东西

于 2013-01-31T16:11:23.813 回答