2012-04-03 122 views
1

我开始学习如何阅读Objective-C中的消息语法,并希望加强对消息语法的良好理解(我来自Java/C#/ Ruby背景)。阅读这个Objective-C语句的正确方法是什么?

目前,我看着声明:

[self.view addSubview:label]; 

“发送消息给addSubView方法,用标签作为参数,mthod是自我视图对象。”

(“on”并不是真正描述对象的“点符号”的好方法,我可以更好地转录它!)

您如何阅读和解释上述语句?

回答

4

这实际上是一个嵌套的消息发送,althogh点语法使得这混乱。*之间的区别ObjC中的消息和方法起初也有点混乱。一般来说,人们可以将它们视为等同的,但严格来说,将消息发送给对象;该消息是在对象的方法列表抬起头,那么相关的方法被称为**

可以改写:

[[self view] addSubview:label]; 

因此消息view被发送到self,将reciever。其结果是在另一个消息的接收器位置,即addSubview:。你说的labeladdSubview:的论点是正确的。

在英语中,那么,这就是:“添加labelselfview的子视图”或‘发送addSubview:,传递label,在发送viewself的结果’。


*点语法旨在用作属性访问的糖,即使用属性的setter和getter方法;默认情况下,getter的名称与属性本身的名称相同。

**如果找不到方法,则该对象可以对该消息执行其他操作。这种方法/消息区分的唯一真正区别是与消息相关的方法可以在运行时更改 - 动态绑定。

+0

如果您想了解Objective-C或任何语言,您应该在第一次介绍之后查看实现。了解如何完成这一点非常重要,因为下一个与消息/方法混淆的是选择器,它实际上是一个c字符串,用作散列表中的键来查找对消息作出反应的方法。 – Lothar 2012-04-04 00:11:11

+0

(回复:原来的答案)谢谢,这正是我正在寻求增加我的理解的深入类型的解释。这种消息发送的场景听起来很像C++的vtables;他们是用来完成类似的功能吗? – 2012-04-04 00:20:36

+0

@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

3

它呼吁UIView方法addSubView:这是self属性(想必UIViewController实例或一个子类,用var标签作为参数,想必这是一个UILabel实例。

0

这种说法是告诉你的看法self.view(这是父视图“自我”),以addSubviewlabel

相关问题