【问题标题】:What are the differences among Inheritance, Delegation, Category and Observer Pattern in Objective-C? [closed]Objective-C 中的继承、委托、类别和观察者模式有什么区别? [关闭]
【发布时间】:2014-03-12 07:43:53
【问题描述】:

我是 Objective-C 的新手,iOS 也是。我一直在开发 Android 应用程序——因此对使用继承非常满意。但在 iOS 中,几乎所有东西都是使用委托来实现的。所以基本上我的问题是:

  • 这四个概念有什么区别以及何时使用它们?各自使用的优缺点是什么?

我在 Stackoverflow 上搜索了这个问题,但在任何地方,我都无法同时找到这些概念。

【问题讨论】:

  • 您的问题太宽泛,无法给出答案。我只能为您指出几个资源:iOS Design PatternsCocoa Fundamentals guide
  • 这些是一堆无关的东西。您基本上是在要求我们重写大部分语言的文档。最好只阅读文档。

标签: ios objective-c oop design-patterns delegation


【解决方案1】:

继承:

将基类的属性继承到子类的方式。所有公共和受保护的成员都继承到子类。 *Obj-C 没有私有成员,所以这不会起作用。(但是你通过类扩展创建它们,即使有一些 hack 可以访问它)。

代表团:

将一个班级的任务委派给另一个班级的方式。经常使用的类和委托是UITableViewDelegate。这始终是一对一的。可以使用回调和返回值。

类别:

向现有类添加新方法的方式。当您这样做时,子类也可以使用分类方法。您永远不会使用类别添加属性。 *但是您可以使用关联对象进行添加。

观察者模式:

类充当广播者并广播消息。它不关心其他谁是它的观察者或接受者。所有观察者都会收到观察者发送的通知并开始执行该消息。这可以是 1 对 0、1 对 1 或 1 对多。甚至不止一个广播公司可以发送相同的通知,因此您可以说 -to-。这里不发送回调或返回值。

【讨论】:

  • 所以委托和观察者模式的唯一区别是“返回值被发送”?
  • 在委托中它可能会返回一个值,而在观察者中它不能。即使您的程序运行良好,也可能没有任何观察者,但在委托的情况下,委托必须在场,否则它将崩溃!!!
  • 对于任何使用委托的类,委托必须始终存在,否则程序将崩溃,这是不正确的。事实上,这对我来说听起来很糟糕。
猜你喜欢
  • 2010-10-06
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
相关资源
最近更新 更多