我正在经历一些 Objective-C 的演练,其中很多地方都让我大吃一惊。我很想把他们打倒。
消息发送和方法调用有本质区别吗? Objective-C 让我可以同时完成这两件事:object.message
产生相同的结果[object message]
。我认为也许无法使用点运算符策略创建嵌套消息?
-
我创建了一个NSArray
对象,现在我要使用一个打印结果NSEnumerator
:
id myObject = [object objectEnumerator];
在 while 循环中迭代并打印结果。这type of myObject
is id
,这意味着它在运行时而不是编译时解析。我非常清楚我的存储中存储了什么样的对象NSArray
-他们是NSString
s——所以通过改变类型myObject
to
NSString * myObject
,它工作得很好。然而,我尝试了一下,发现myObject
可以是任何类型,无论是NSString
or NSArray
or NSEnumerator
,其中任何一个都工作得很好,完美地迭代了NSArray
对象并产生相同的结果。
那是怎么回事?
我不确定您想在“消息发送”和“方法调用”之间做出什么样的区别,因为它们是描述同一事物的两种方式。点语法只是调用 getter 和 setter 的快捷方式,即:
[foo length]
foo.length
完全相同,如下所示:
[foo setLength:5]
foo.length = 5
当您使用 getter 和 setter 时,通常应该只使用点语法;对所有其他方法调用使用方括号语法。
对于你的第二个问题:这就是动态类型的工作原理。您在代码中放入的任何类型声明都是对编译器的提示;只要对象响应,您的 Objective-C 方法调用就始终有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)