RACDelegateProxy与Common Delegate实现

时间:2015-05-12 14:18:53

标签: ios delegates reactive-cocoa

我正在研究ReactiveCocoa(我不熟悉FRP,也没有使用纯函数式编程),我看到RacDelegateProxy类可以使用void返回值抽象委托方法的实现。当我们与传统的实现相比,即实现每个方法并获得调用时,我没有得到的好处是使用它有什么好处。那么,使用RACDelegateProxy而不是以传统方式实现的主要区别和好处是什么?

代码示例(使用ReactiveCocoa):

self.deselectDelegate = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UITableViewDelegate)];
[[self.deselectDelegate rac_signalForSelector:@selector(tableView:didDeselectRowAtIndexPath:)]
 subscribeNext:^(RACTuple *arguments) {
     // code ...
 }];

VS(传统实施):

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    // code ...
}

1 个答案:

答案 0 :(得分:2)

您的问题可以概括为"信号优于回调的优势"。

RAC's github repo上曾经有一个名为逃离回调地狱的链接 - 链接不再有效,但我认为该标题完美突出了这一点。

基本上,FRP的一个优点是将所有异步模式(KVO,代理,通知......)转换为信号,从而产生:

  • 简单的命题:您是否尝试过链接多个网络操作?用标准方法拖累它是非常困难的。您甚至可能需要在异步链中添加一些数据库操作或位置更新...

  • 提高可读性和更轻松的维护:相关代码在同一个地方,而不是以回调的形式在整个班级。

修改

发现上述文章已归档:Escape from Callback Hell