有没有人知道在单独的线程上接收 NSURLDownload 的委托方法的方法,即不是主线程?我正在使用 NSOperationQueue 来管理它们,但目前我需要使用 performSelectorOnMainThread 方法来使其正常工作。这样做的问题是它使内核任务疯狂地达到大约 30% 的 CPU 周期。奇怪的是,这只是在升级到 SL 之后才发生,当时 NSOperationQueue 改变了行为(不是我在贬低它,GCD 摇滚!)
谢谢科林
有没有人知道在单独的线程上接收 NSURLDownload 的委托方法的方法,即不是主线程?我正在使用 NSOperationQueue 来管理它们,但目前我需要使用 performSelectorOnMainThread 方法来使其正常工作。这样做的问题是它使内核任务疯狂地达到大约 30% 的 CPU 周期。奇怪的是,这只是在升级到 SL 之后才发生,当时 NSOperationQueue 改变了行为(不是我在贬低它,GCD 摇滚!)
谢谢科林
我的第一个问题是,你用 NSURLDownload 做什么?您只是将一堆文件下载到磁盘上,还是您真的想要内存中的数据?
如果您正在将一堆文件下载到磁盘并且您不想进行任何特殊处理,我首先尝试在主线程上触发所有 NSURLDownloads,而无需打扰 NSOperationQueue ...我的意思是,我们在谈论多少个操作?它们可以同时运行吗?主线程上的回调应该不是太大的问题,除非你在收到通知时正在做一些重量级的事情,在这种情况下,它看起来像......
否则,我会切换到使用 NSURLConnection。它专门记录在您设置它的线程上给您回电,并且更灵活。当然,它没有那么高级,所以如果你真的想将文件保存到磁盘,你将不得不自己编写 I/O。不应该是一个巨大的困难 - 它就像四行额外的代码。
-W
NSOperationQueue 改变了行为,因为它是错误的。它现在看起来很坚固,但是是的,它有不同的个性。参考(http://www.mikeash.com/?page=pyblog/dont-use-nsoperationqueue.html)
你能提供更多关于你的问题的信息吗?下载完成时只需要通知吗?您是否同时进行多个下载?