哪个更好的阻止或委托?

时间:2015-06-29 07:43:53

标签: ios objective-c iphone delegates block

Apple正在不断更改现在代表形式的大部分现有代码。

我总是对使用块的位置和使用委托的位置感到困惑?

即使我总是觉得如果我们使用delegate而不是block,它是提供抽象的更好方法。 只想在本主题中听到其他开发人员的观点。如果看起来非常愚蠢的主题原谅我。

1 个答案:

答案 0 :(得分:1)

我认为许多“块API”比委托更复杂,更无意义。让我们来看看它在做什么:

  1. 在这两种情况下,您都希望在外部类上运行自定义代码。通常,在事件发生时运行此代码。 (连接完成,用户做了一些事情,等等。)

  2. 通常,您需要一个状态来运行代码。这意味着您可以访问与代码相关的一些数据。块通过闭包执行,委托通过对象状态执行此操作。 (处理此类型的C类型为void * user。)

  3. 区别在于每个块都有自己的状态,而委托的方法通过其公共实例共享状态。

  4. 所以我的经验法则是:

    如果要运行的代码类似于“one-shooter”(即完成处理程序),我更喜欢传递一个(单个)块,而不是创建一个类和一个充当委托的实例。

    如果有不同的代码一次又一次地运行(即将不同的事件作为数据块和身份验证挑战,并且......),我不传递大量的块(或者一个块获取类型参数并具有如果在内部链,但使用委托。

    简短形式:One-shooter是一个块,类似会话的调用是委托。