为什么苹果建议使用runloop而不是GCD来获取多个图像?

8

在 iOS 4.0 中,通过 Grand Central Dispatch 加载图片(每块一个)是否是个好主意?(用于 UITableView)

为什么苹果公司更喜欢使用 runloop,就像在 WWDC 视频演示 207 和 208 中所说明的那样?


2
在2007年,GCD并不存在。现在要简单得多了。 - jtbandes
2010 年的 WWDC 中有编号为 207-207 的讲座,但不包括 2007 年的。 - Henry
2个回答

8
那些视频中所提出的观点是,基础网络与Grand Central Dispatch目前不太兼容,因此,如果您想进行基于Foundation的网络操作,那么运行循环是避免传统线程问题的最佳选择。但是,在Session 206 - “介绍iPhone上的块和Grand Central Dispatch”中,您将看到他们展示了如何使用GCD来实现这一目的的示例。

我个人更喜欢GCD,因为代码优雅,并且(正如那些视频中所说)它是未来的发展方向。

GCD在基于Foundation的网络编程中表现不佳?那么可以使用什么呢?它与基于Foundation的网络编程API有何不同?谢谢。 - Henry
@Henry - 在使用GCD时,我认为你应该使用CFNetwork函数,而不是像NSURLConnection这样的类。然而,WWDC 2010 Session 208中基于runloop的方法非常有趣。 - Brad Larson
谢谢Brad,那你会推荐新手使用什么?GCD与CFNetwork函数,还是RunLoop与NSURLConnection和RunLoop一起使用? - Henry
1
@Henry - 老实说,对于新手,我建议看看像ASIHTTPRequest这样的包装器:http://allseeing-i.com/ASIHTTPRequest/。虽然我一直在使用NSOperation,但我只是开始将GCD与我的应用程序集成,而运行循环方法对我来说还是比较新的。对于一般的并发任务,我建议先阅读有关NSOperation的资料,然后再学习GCD。 - Brad Larson
谢谢,有一件事我不理解runloop方式,如何才能同时下载2个图片以减少延迟? - Henry
显示剩余2条评论

6

我还没有看那些视频,但这是苹果工程师Chris Hanson关于GCD和NSOperation的说法

在可用的最高抽象级别下操作,并在测量表明需要时降低到较低级别的抽象。

换句话说,您应该使用NSOperations来进行异步处理(例如为表视图加载图像),除非您有一个好的必要理由选择GCD。


3
在这种情况下,创建NSOperation并将其放置在队列中所需的开销可能会在所有表视图行中累积,因此更轻量级的blocks可能更可取。对于此任务,使用Blocks和GCD还可以简化他的代码。 - Brad Larson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接