gpt4 book ai didi

objective-c - 点语法和方括号语法有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 03:18:56 28 4
gpt4 key购买 nike

我正在经历一些 fpr Objective-C 的演练,我到达了许多让我大吃一惊的地方。我很想把它们弄下来。

  1. 消息发送和方法调用有根本区别吗? Objective-C 让我可以做到这两点:object.message 产生与 [object message] 相同的结果。我认为使用点运算符策略可能无法创建嵌套消息?

  2. 我创建了一个 NSArray 对象,现在我要使用 NSEnumerator 打印结果:

    id myObject = [object objectEnumerator];

    在 while 循环中迭代并打印结果。 myObjecttypeid,这意味着它是在运行时而不是编译时解析的。我非常清楚我的 NSArray 中存储了什么样的对象——它们是 NSString——所以通过将 myObject 的类型更改为NSString * myObject,它工作得很好。然而,我试验并发现 myObject 可以是任何类型,可以是 NSStringNSArrayNSEnumerator ,并且其中任何一个都可以正常工作,完美地迭代 NSArray 对象并产生相同的结果。这是怎么回事?

最佳答案

我不确定您试图在“消息发送”和“方法调用”之间做出什么样的区分,因为它们是描述同一事物的两种方式。点语法只是调用getters和setters的快捷方式,即:

[foo length]
foo.length

完全一样,如下:

[foo setLength:5]
foo.length = 5

您通常应该只在使用 getter 和 setter 时使用点语法;对所有其他方法调用使用方括号语法。

对于你的第二个问题:这就是动态类型的工作原理。您在代码中放置的任何类型声明都是对编译器的提示;只要对象响应它们,您的 Objective-C 方法调用将始终有效。

关于objective-c - 点语法和方括号语法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7423853/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com