对象"发送消息"是什么意思?协议如何帮助对象通告它支持的消息?

Pra*_*ypa 0 iphone cocoa cocoa-touch protocols objective-c

对象"发送消息"是什么意思?协议如何帮助对象宣传它支持的消息?有人有例子吗?

Pet*_*sey 5

将对象视为不仅仅是无生命的对象,有助于将对象视为具有知识(状态)的参与者,具有关系(与其他对象),做出决策以及执行动作(对其他对象,对其他对象).

在这个概念中,我们不是说"x调用fooy上的方法",这是一个非常编程的事情,我们将这些对象称为彼此交谈.我们可能会说"x向fooy 发送消息",或者更具体地说,"文本字段x告诉y它的textFieldDidChange:"或"x询问它framistanCalibrationLevel是什么"或任何类似的声明可能与人们一样容易想象中的对象.

("消息"术语的原因并不完全是概念性的:它是由Objective-C的母语之一Smalltalk带来的.这就是历史原因.)

协议是一种工作描述.正如一个人可能佩戴管理员,工程师,主任或接待员的头衔,履行这些功能的对象可能符合这些名称的协议,声明这些对象响应告诉他们要做的消息,或询问他们,他们工作的某些方面.

在实际的Cocoa和Cocoa Touch用法中,协议通常描述对象可能提供给另一个对象的一组函数(同样,不是编程意义上的),例如响应视图可以获取数据的消息的数据源,或一组对象可能响应的通知,如应用程序委托的的applicationDidFinishLaunching:,applicationWillTerminate:等等.

有时协议可以更加通用,例如超类的更广泛版本 - 真实世界的类比是许多不同类型的销售人员,而Cocoa示例是响应验证消息的许多不同类别的UI对象.在某些框架中,您可以为此创建一个抽象类,但协议允许您执行相同的操作(声明一堆相似但不同的对象具有一些共同的属性/功能),而无需编写虚拟实现.