2016-02-26 49 views
-1

我需要编写一个方法来完成一些异步的东西(HTTP GET请求),并在完成时调用一些以回调形式提供的方法。有关使用回调创建方法的最佳做法

在Objective-C中做这些事情的适当方法是什么?我是否应该为成功和错误处理提供一个完成回调,还是应该将它们作为单独的参数传递?

另外,我应该如何命名这种方法?这里的最佳实践是什么?

+0

这是一个很好的话题,但可能对[programmers.se]更好。 – rickster

回答

0

这取决于你的喜好。我的首选是有一个回调。在这一点上,我会检查错误。如果没有错误存在,那么我会认为响应是成功的,然后开始相关处理。

+0

所以这种情况下没有一般的做法? – FrozenHeart

2

设置委托并在异步过程完成时在委托中调用完成方法是一种方法。

在过去的几年中,苹果和更大的iOS/Mac社区一直在摆脱这种设计模式。相反,你更有可能找到一个采用完成块的方法。该完成块可能具有成功参数,数据参数和错误参数。

查看现在不推荐使用的NSURLConnection类中的sendAsynchronousRequest:queue:completionHandler:方法或NSURLSession中最近使用的dataTaskWithURL:completionHandler:方法。两者都有一个完成处理程序,当异步请求完成处理时会被调用。

我改变了我的习惯,更有可能在新设计中使用完成块而不是代理和回调。

+0

我不认为这是任何人都从协议委托模式转移的情况。这完全取决于两个物体之间的关系。一如既往,为工作使用正确的工具。 – nhgrif

+0

通常您可以使用任一种方法。在块存在之前,你(显然)不能使用它们。现在,它们是一种选择,在可以使用的情况下,块有一些优点。当然,仍然有代理模式是更好的解决方案的情况。 –