我正在开发一个 iPad 应用程序,目前正在努力寻找最佳的多线程方法。让我用一个简化的例子来说明这一点:
我有一个包含 2 个子视图的视图、一个目录选择器和一个画廊,其中包含所选目录中所有图像的缩略图。由于“下载”和生成这些缩略图可能需要很长时间,所以我需要多线程,这样视图的交互和更新就不会被阻塞。
这是我已经尝试过的:
[self performSelectorInBackground:@selector(displayThumbnails:) withObject:currentFolder];
这很好用,因为用户交互没有被阻止,但是当用户在第一个文件夹仍在加载时点击另一个文件夹时,它会惨遭失败。两个线程试图访问相同的视图和变量,这会导致彼此之间的正确执行混乱。当用户点击另一个文件夹时,displayThumbnails
当前加载的文件夹应该被中止。我没有找到任何方法来做到这一点..
NSThreads
我尝试了这个,但遇到了与第一种方法几乎相同的问题,我没有找到一种(简单的)方法来取消正在进行的方法。(是的,我知道[aThread cancel]
但没有找到“恢复”线程的方法)。也许我应该NSThread
继承并实现我自己的 isRunning 等方法?但是没有更好的方法或我忽略的第三个(甚至第四个和第五个)选项吗?
我认为这是一个相当简单的示例,并且我认为没有子类化可能有更好的解决方案NSThread
。那么,你会怎么做?请发表您的意见!