Cocoa nsurl在单独的线程上下载委托方法

Cocoa nsurl在单独的线程上下载委托方法,cocoa,nsurlconnection,nsurldownload,Cocoa,Nsurlconnection,Nsurldownload,有人知道在单独的线程(即不是主线程)上接收NSURLDownload的委托方法的方法吗?我正在使用NSOperationQueue来管理它们,但目前我需要使用performSelectorOnMainThread方法使其也能正常工作。问题是,它会使内核任务达到CPU周期的30%左右。奇怪的是,这只发生在升级到SL之后,NSOperationQueue改变了行为(我并不反对,GCD rocks!) 谢谢 ColinNSOperationQueue由于有bug而改变了行为。它现在看起来很坚固,但是是

有人知道在单独的线程(即不是主线程)上接收NSURLDownload的委托方法的方法吗?我正在使用NSOperationQueue来管理它们,但目前我需要使用performSelectorOnMainThread方法使其也能正常工作。问题是,它会使内核任务达到CPU周期的30%左右。奇怪的是,这只发生在升级到SL之后,NSOperationQueue改变了行为(我并不反对,GCD rocks!)

谢谢
Colin

NSOperationQueue由于有bug而改变了行为。它现在看起来很坚固,但是是的,它有不同的个性。 参考号()


你能提供更多关于你的问题的信息吗?您是否只需要在下载完成时通知?您是否一次下载多个文件?

我的第一个问题是,您使用NSURLDownload做什么?你只是把一堆文件下载到磁盘上,还是真的想把数据存储在内存中

  • 如果您正在将一堆文件下载到磁盘上,并且不想进行任何特殊处理,我会首先尝试在主线程上启动所有NSURLDownloads,而不必使用NSOperationQueue。。。我是说,我们在谈论多少次行动?它们能同时运行吗?主线程上的回调不应该是一个太大的问题,除非你在做一些重量级的事情,当你得到一些数据的通知时,在这种情况下,它看起来像

  • 否则,我会切换到使用NSURLConnection。它专门记录了在设置它的线程上给您回电话,而且更灵活。当然,它不是高级别的,所以如果您真的想将文件保存到磁盘,您必须自己编写I/O。不应该是一个巨大的困难-它就像额外的四行代码


-W

我已经做了更多的研究,我的应用程序依赖于以前的NSOperationQueue实现,现在已经改变了,它应该支持这两种实现(希望如此)。但这并不能改变CPU过载。该指数仍上涨了30%左右。这不会改变我是否有1下载或30。。。是的,我需要不断收到更新通知。当我没有为下载指定一个委托时,cpu的使用就会消失。即使委托什么都不做,cpu的使用率也很高?是的,回调例程中是否有大量处理正在进行,这似乎没有什么区别。