我正在显示许多直接从我的应用程序加载的图像(未下载)。第一次滚动时,我的表格视图很慢。在我的所有单元格显示后它变得平滑。我真的不知道为什么。
我在 viewDidLoad 中加载了一组 UIImage。然后在我的 tableview 委托中,我只是在给定的索引路径处获取图像并将其设置为我的单元格的 UIImageView。
你知道我怎样才能提高表现吗?
我正在显示许多直接从我的应用程序加载的图像(未下载)。第一次滚动时,我的表格视图很慢。在我的所有单元格显示后它变得平滑。我真的不知道为什么。
我在 viewDidLoad 中加载了一组 UIImage。然后在我的 tableview 委托中,我只是在给定的索引路径处获取图像并将其设置为我的单元格的 UIImageView。
你知道我怎样才能提高表现吗?
只是为了分享我已经修复并且效果很好我遵循的步骤。
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/////
这将动态加载所有图像,并且比以前的缓慢和生涩的行为更平滑地滚动表格视图。
祝一切顺利
您可以在这里阅读我刚刚提交的答案:
在 cellForRowAtIndexPath 从 CoreData 加载图像会减慢滚动速度
基本思想是使用 Grand Central Despatch 将您的表格视图图像获取代码移动到一个单独的线程,当图像可用时将您的单元格填充回主线程。即使从文件系统将图像加载到内存中存在延迟,您的滚动也会非常流畅。
我从您的问题中了解到的是,您的图像都已准备就绪,并且它们已加载到 RAM 中(存储在 viewDidLoad 中填充的数组中)。在这种情况下,我想查看 cellForRowAtIndexPath 中的确切代码以提供帮助。我的直觉告诉我,那里正在做一些不应该在主线程上做的事情(正如他所暗示的那样)。问题是 - 如果它只是从 NSArray 中获取(最坏的情况是 O(log(n))),那么你不应该看到性能下降。
我知道您没有下载图像,但我仍然建议在后台线程上执行任何非 UI 操作。我写了一些可以帮助你的东西。