创建自定义协议的相对优势&代表在目标-c

时间:2011-09-15 14:13:34

标签: iphone objective-c delegates protocols

我想知道使用自定义协议和委托与实现双向类通信的其他技术相比有什么相对优势?

另一个解决方案就是拥有以下内容:

与B相关联 B与A相关联

这样A和B都可以访问彼此的信息......

我有点了解协议允许增加系统设计的模块性,但我不完全确定为什么或如何?

4 个答案:

答案 0 :(得分:2)

自定义委托协议是一件好事,它允许您的对象不依赖于特定的类。符合给定协议的任何对象都可以是委托。例如,如果任何对象实现了NSTableViewDelegate协议,则它可以是表视图的委托。

否则,如果使用直接关联,则必须使用特定类的对象。

答案 1 :(得分:0)

使用委托模式(特别是使用协议),类保持松散耦合。在考虑MVC模式时,这很重要。委托模式允许视图与控制器保持分离。

此外,“与A关联的B B关联”将创建保留周期。委托模式编纂了内存管理问题(即一个类不应该保留其委托)。

答案 2 :(得分:0)

这种双向依赖是为了避免在编译级别它意味着你有每个包括其他包括。

当OO编程的目标是减少组件耦合时,你的课程太多了。

即使你能做到这并不意味着这是好习惯。

良好的实践是指定2个协议,一个用于服务器/对象/生产者/ ...,一个用于客户端/委托/消费者/ ......。

然后A将实现一个协议,将与实现第二个协议的对象进行通信。 B将实施第二个协议。

最后,这意味着您可以在将来替换B实现以匹配新的API /编程模型/测试存根等。

减少耦合是帮助代码的模块化和可测试性的一种手段。

你不必这么做,但是从现在开始6个月后回到你的代码上你会很高兴:)

答案 3 :(得分:0)

通常不需要2个物体进行全双向通信 通常在iPhone中,您从A发起B(例如,从列表视图控制器中详细查看控制器)并将A设置为B的委托,以便它将收到有关相关事件的直接通知。

在面向对象的设计/编程方面,在完全双向连接中连接2个对象是不对的 在这种情况下你松开了封装。

使用委托设计模式后,您的对象并不真正了解对方,但仍可以进行通信 此外,这样可以将实现某个协议的任何对象设置为委托。

这样对象也不必相互保留......