0

假设我正在为 Vimeo API 编写一个公开可用的框架。这个框架需要从互联网上获取信息。因为这可能需要一些时间,所以我需要使用 threadin 来防止 UI 挂起。Foundation 为此使用了委托,例如 NSURLConnectionDelegate。但是,Game Kit 使用块作为回调函数。

推荐的方法是什么?我知道标准 GCC 版本不支持块,但是对于使用我的框架的代码,它们需要的代码要少得多。

另一方面,委托是真正的方法,当使用协议时,我确信这些方法已经实现。

谢谢。

4

5 回答 5

2

我真的很喜欢块,但在这种情况下我很想使用委托协议。网络连接可能会以多种方式失败,并且它们的代表倾向于保留大量关于它们的状态信息。我发现这很好地映射到具有许多可选方法的委托协议。

如果您提供了一个非常简化的 API 来访问网络数据,那么一对成功/失败的块可能就足够了。就我个人而言,我发现我必须处理很多不同的情况,这些情况在有状态的委托对象上使用了许多委托方法。例如; 我应该立即还是稍后重试失败的连接,失败连接的相对优先级是否改变,我可以让我们做出部分响应,我是否应该在连接可用时切换到 wifi,如果出现提示,我是否为用户提供身份验证的机会,我是否在连接中显示增量进度?你可以用块来处理所有这些,但我发现我宁愿有一个委托类来管理连接。

在不了解您打算让您的界面获取哪些数据的情况下,我不知道我可以更具体,但是。如果可能的话,我很想允许 API 的用户管理他们自己的连接状态。

于 2011-01-15T04:10:25.287 回答
0

这完全取决于您的目标受众是谁。如果您希望人们为 OS X 10.5 或 iOS 3.x 编写应用程序,那么您需要使用委托。否则,继续使用块。

于 2011-01-15T00:51:57.870 回答
0

这是一个相当主观的问题,因为两者都是有效的选项,但 Apple 似乎正在进一步转向使用块作为“丢弃”方法。

于 2011-01-15T00:52:15.980 回答
0

主要问题是您的目标受众。

块仅限于雪豹(和IOS 4?不记得了)。

如果你希望你的框架可以被以前的操作系统使用,你不能使用块。

如果您对操作系统的限制感到满意,那么请使用块和 NSOperationQueue,它非常好用且易于使用。

更好的是,您可以提供两种选择..

于 2011-01-15T00:52:23.327 回答
0

我建议使用块,如果你做对了,你可以同时支持 10.5。

查看开源PLBlocks 运行时,它允许您在 10.5 和 10.6 上无缝使用块。

于 2011-01-15T03:12:22.250 回答