对象“发送消息”是什么意思?协议如何帮助对象宣传它支持的消息?有人有例子吗?
答案 0 :(得分:5)
将对象视为不仅仅是无生命的对象,有助于将对象视为具有知识(状态)的参与者,具有关系(与其他对象),做出决策以及执行动作(与其他对象一起使用) )。
在这个概念中,我们不是说“x在y上调用foo
方法”,这是一个非常编程的事情,我们将这些对象称为彼此交谈。我们可能会说“x向y发送foo
消息”,或者更具体地说,“文本字段x告诉y其textFieldDidChange:
”或“x询问其framistanCalibrationLevel
是什么“或者任何类似的陈述,可能与人们关于想象的物体一样容易。
(“消息”术语的原因并不完全是概念性的:它是由Objective-C的母语之一Smalltalk带来的。这就是历史原因。)
协议是一种工作描述。正如一个人可能佩戴管理员,工程师,主任或接待员的头衔,履行这些功能的对象可能符合这些名称的协议,声明这些对象响应告诉他们要做的消息,或询问他们,他们工作的某些方面。
在实际的Cocoa和Cocoa Touch中,协议通常描述对象可能提供给另一个对象的一组函数(同样,不是编程意义上的),例如响应视图可以获取的消息的数据源对象可能响应的数据或一组通知,例如应用程序委托的applicationDidFinishLaunching:
,applicationWillTerminate:
等。
有时协议可以更加通用,比如超类的更广泛版本 - 真实世界的类比是许多不同类型的销售人员,而Cocoa示例是响应验证消息的许多不同类别的UI对象。在某些框架中,您可以为此创建一个抽象类,但协议允许您执行相同的操作(声明一堆相似但不同的对象具有一些共同的属性/能力),而无需编写虚拟实现。
答案 1 :(得分:0)
阅读Apple Messaging中的Objective-C Runtime Programming Guide部分。