Apple正在不断更改现在代表形式的大部分现有代码。
我总是对使用块的位置和使用委托的位置感到困惑?
即使我总是觉得如果我们使用delegate而不是block,它是提供抽象的更好方法。 只想在本主题中听到其他开发人员的观点。如果看起来非常愚蠢的主题原谅我。
答案 0 :(得分:1)
我认为许多“块API”比委托更复杂,更无意义。让我们来看看它在做什么:
在这两种情况下,您都希望在外部类上运行自定义代码。通常,在事件发生时运行此代码。 (连接完成,用户做了一些事情,等等。)
通常,您需要一个状态来运行代码。这意味着您可以访问与代码相关的一些数据。块通过闭包执行,委托通过对象状态执行此操作。 (处理此类型的C类型为void * user
。)
区别在于每个块都有自己的状态,而委托的方法通过其公共实例共享状态。
所以我的经验法则是:
如果要运行的代码类似于“one-shooter”(即完成处理程序),我更喜欢传递一个(单个)块,而不是创建一个类和一个充当委托的实例。
如果有不同的代码一次又一次地运行(即将不同的事件作为数据块和身份验证挑战,并且......),我不传递大量的块(或者一个块获取类型参数并具有如果在内部链,但使用委托。
简短形式:One-shooter是一个块,类似会话的调用是委托。