Iphone 使用performSelectorInBackground在后台加载UITableViewCell图像,可提高性能

Iphone 使用performSelectorInBackground在后台加载UITableViewCell图像,可提高性能,iphone,objective-c,cocoa-touch,uitableview,Iphone,Objective C,Cocoa Touch,Uitableview,我有一种在后台加载UITableViewCell图像的方法。我使用performSelectorInBackground。问题是这些线程正在完成和加载图像,即使它们可能不再出现在屏幕上。这可能会对资源造成负担,尤其是当用户快速滚动并创建大量单元格时。图像相当小,从磁盘(sqlite db)加载,而不是从URL加载 我在单元格中输入了代码,检查它是否是最近显示的单元格,如果不是,我不会加载图像。这是可行的,但它仍然在创建线程,即使从磁盘加载映像的“昂贵”工作不会执行,除非它是最新的单元 问题是,解

我有一种在后台加载UITableViewCell图像的方法。我使用performSelectorInBackground。问题是这些线程正在完成和加载图像,即使它们可能不再出现在屏幕上。这可能会对资源造成负担,尤其是当用户快速滚动并创建大量单元格时。图像相当小,从磁盘(sqlite db)加载,而不是从URL加载

我在单元格中输入了代码,检查它是否是最近显示的单元格,如果不是,我不会加载图像。这是可行的,但它仍然在创建线程,即使从磁盘加载映像的“昂贵”工作不会执行,除非它是最新的单元

问题是,解决这个问题的最好办法是什么?我是否应该在每次重用UITableViewCell时终止现有线程?如何终止performSelectorInBackground调用的线程


关于如何处理这个问题,其他任何建议都是值得赞赏的。

< P>你可以考虑每次只加载一个图像。您仍然可以在线程上执行此操作,但要序列化加载,以避免系统负担过重

当可见单元格变为可见时,可以将其添加到数组中;当单元格变为不可见时,可以将其从列表中删除(或只是在方便的时候检查它们是否可见)。您还可以尝试将加载延迟一小段时间,以避免加载刚刚滚动过的图像。线程将从列表中弹出第一个项目并加载它,然后对另一个加载进行排队

对于线程技术,您可以查看或制作一个专用线程。提供了一个很好的概述。虽然你使用的方法没有什么问题

在线程之间共享数据还需要某种形式的锁定,以避免同时访问。

您看过吗