假设我正在为 Vimeo API 编写一个公开可用的框架。这个框架需要从互联网上获取信息。因为这可能需要一些时间,所以我需要使用 threadin 来防止 UI 挂起。Foundation 为此使用了委托,例如 NSURLConnectionDelegate。但是,Game Kit 使用块作为回调函数。
推荐的方法是什么?我知道标准 GCC 版本不支持块,但是对于使用我的框架的代码,它们需要的代码要少得多。
另一方面,委托是真正的方法,当使用协议时,我确信这些方法已经实现。
谢谢。
假设我正在为 Vimeo API 编写一个公开可用的框架。这个框架需要从互联网上获取信息。因为这可能需要一些时间,所以我需要使用 threadin 来防止 UI 挂起。Foundation 为此使用了委托,例如 NSURLConnectionDelegate。但是,Game Kit 使用块作为回调函数。
推荐的方法是什么?我知道标准 GCC 版本不支持块,但是对于使用我的框架的代码,它们需要的代码要少得多。
另一方面,委托是真正的方法,当使用协议时,我确信这些方法已经实现。
谢谢。
我真的很喜欢块,但在这种情况下我很想使用委托协议。网络连接可能会以多种方式失败,并且它们的代表倾向于保留大量关于它们的状态信息。我发现这很好地映射到具有许多可选方法的委托协议。
如果您提供了一个非常简化的 API 来访问网络数据,那么一对成功/失败的块可能就足够了。就我个人而言,我发现我必须处理很多不同的情况,这些情况在有状态的委托对象上使用了许多委托方法。例如; 我应该立即还是稍后重试失败的连接,失败连接的相对优先级是否改变,我可以让我们做出部分响应,我是否应该在连接可用时切换到 wifi,如果出现提示,我是否为用户提供身份验证的机会,我是否在连接中显示增量进度?你可以用块来处理所有这些,但我发现我宁愿有一个委托类来管理连接。
在不了解您打算让您的界面获取哪些数据的情况下,我不知道我可以更具体,但是。如果可能的话,我很想允许 API 的用户管理他们自己的连接状态。
这完全取决于您的目标受众是谁。如果您希望人们为 OS X 10.5 或 iOS 3.x 编写应用程序,那么您需要使用委托。否则,继续使用块。
这是一个相当主观的问题,因为两者都是有效的选项,但 Apple 似乎正在进一步转向使用块作为“丢弃”方法。
主要问题是您的目标受众。
块仅限于雪豹(和IOS 4?不记得了)。
如果你希望你的框架可以被以前的操作系统使用,你不能使用块。
如果您对操作系统的限制感到满意,那么请使用块和 NSOperationQueue,它非常好用且易于使用。
更好的是,您可以提供两种选择..
我建议使用块,如果你做对了,你可以同时支持 10.5。
查看开源PLBlocks 运行时,它允许您在 10.5 和 10.6 上无缝使用块。