在iphone / ipad上连续运行几个背景线程

时间:2010-09-14 01:35:43

标签: iphone objective-c ipad

我必须下载大量的图像而且我是在后台线程上进行的,问题是所有下载的数据都没有发布,直到我回到主线程这对于几百张图片来说很好但是当我成千上万的应用程序耗尽了内存和崩溃。

所以我需要连续运行几个后台线程,所以我可以批量下载200个图像的组,这样我的自动释放池就可以清除,内存就会被释放。

我无法理解如何做到这一点。我需要在主线程上使用某种递归函数来调用后台线程并跟踪批处理,以便它知道接下来要调用哪个。我知道在线程之间来回传递值会给我带来一些问题,所以我不知道如何处理这个问题?

之前有人解决过这样的问题吗?

3 个答案:

答案 0 :(得分:1)

NSOperationQueues为您解决此问题。您创建了一个从NSOperation下载的类,它为您执行下载。然后创建NSOperationQueue并将下载添加到队列中。您可以控制队列的最大并发性等。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperationQueue_class/index.html

答案 1 :(得分:0)

在释放内存之前,您无需等待下载所有内容。您可以使用performSelectorOnMainThread将每个图像或一小批图像传递到主线程,并让主线程在将数据缓存到存储中或使用数据时释放内存。然后在后台线程中继续,直到完成并再次使用performSelectorOnMainThread传递“完成”消息。

答案 2 :(得分:0)

使用NSInvocationOperation。这将解决问题,而不是分裂代码块。这是我使用的样本

NSOperationQueue *downloadQueue = [NSOperationQueue new]; for (Product *cProduct in productsMasterArray) {
NSInvocationOperation *downloadOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImages:) object:cProduct.ITEM_CODE]; [downloadQueue addOperation:downloadOperation]; [downloadOperation release]; }
相关问题