我开始学习如何阅读Objective-C中的消息语法,并希望加强对消息语法的良好理解(我来自Java/C#/ Ruby背景)。阅读这个Objective-C语句的正确方法是什么?
目前,我看着声明:
[self.view addSubview:label];
“发送消息给addSubView方法,用标签作为参数,mthod是自我视图对象。”
(“on”并不是真正描述对象的“点符号”的好方法,我可以更好地转录它!)
您如何阅读和解释上述语句?
我开始学习如何阅读Objective-C中的消息语法,并希望加强对消息语法的良好理解(我来自Java/C#/ Ruby背景)。阅读这个Objective-C语句的正确方法是什么?
目前,我看着声明:
[self.view addSubview:label];
“发送消息给addSubView方法,用标签作为参数,mthod是自我视图对象。”
(“on”并不是真正描述对象的“点符号”的好方法,我可以更好地转录它!)
您如何阅读和解释上述语句?
这实际上是一个嵌套的消息发送,althogh点语法使得这混乱。*之间的区别ObjC中的消息和方法起初也有点混乱。一般来说,人们可以将它们视为等同的,但严格来说,将消息发送给对象;该消息是在对象的方法列表抬起头,那么相关的方法被称为**
可以改写:
[[self view] addSubview:label];
因此消息view
被发送到self
,将reciever。其结果是在另一个消息的接收器位置,即addSubview:
。你说的label
是addSubview:
的论点是正确的。
在英语中,那么,这就是:“添加label
为self
的view
的子视图”或‘发送addSubview:
,传递label
,在发送view
到self
的结果’。
*点语法旨在用作属性访问的糖,即使用属性的setter和getter方法;默认情况下,getter的名称与属性本身的名称相同。
**如果找不到方法,则该对象可以对该消息执行其他操作。这种方法/消息区分的唯一真正区别是与消息相关的方法可以在运行时更改 - 动态绑定。
它呼吁UIView
方法addSubView:
这是self
属性(想必UIViewController
实例或一个子类,用var标签作为参数,想必这是一个UILabel
实例。
这种说法是告诉你的看法self.view
(这是父视图“自我”),以addSubview
label
。
如果您想了解Objective-C或任何语言,您应该在第一次介绍之后查看实现。了解如何完成这一点非常重要,因为下一个与消息/方法混淆的是选择器,它实际上是一个c字符串,用作散列表中的键来查找对消息作出反应的方法。 – Lothar 2012-04-04 00:11:11
(回复:原来的答案)谢谢,这正是我正在寻求增加我的理解的深入类型的解释。这种消息发送的场景听起来很像C++的vtables;他们是用来完成类似的功能吗? – 2012-04-04 00:20:36
@Jimmy:对不起,我不确定。我对C++几乎一无所知。 ObjC调度的许多细节在bbum的博客中解释:http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/ – 2012-04-04 00:25:33