2015-06-29 34 views
-3

苹果正在不断改变现在以代表形式存在的大部分现有代码以阻止。哪个更好的块或委托?

我总是有一个困惑,在哪里使用块和在哪里使用代表?

即使我总是觉得,如果我们使用委托而不是块来提供抽象的更好的方法。 只是想听到其他开发人员在这个主题中查看。如果这看起来很愚蠢的话题,请原谅我。

+0

没有“更好”的东西。 –

+0

您需要从_“哪种方式更适合我的实际设计模式?”_的角度来检查这样的问题。 – holex

+0

http://stackoverflow.com/users/1214122/holex感谢您的回复。 – user3556406

回答

1

我认为许多“块API”比代表团更复杂,毫无意义。让我们看看它在做什么:

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

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

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

所以我的经验法则是:

如果运行的代码类似于“一个射手”(即完成处理)的我喜欢创建一个类来传递一个(单)块代替以及充当委托的实例。

如果有不同的代码一次又一次地运行(即获得不同的事件作为数据块和认证挑战,......),我不会传递大量块(或者一个获得类型参数的块一个如果在里面的链),但使用委派。

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