Objective-c中的点符号

Posted

技术标签:

【中文标题】Objective-c中的点符号【英文标题】:Dot notation in objective-c 【发布时间】:2013-02-26 16:15:55 【问题描述】:

我有一个 Java 程序要转换成 Objective-c。

在 Java 中,我使用点表示法,例如有以下代码行:

this.m_root.computeGlobalTransforms();

它调用了一个名为 computeGlobalTransforms() 的方法。

我是否可以在 Objective-c 中使用这样的点表示法,或者我需要将行写成并将“m_root”作为对象传递:

[self computeGlobalTransforms:m_root];

【问题讨论】:

【参考方案1】:

如果computeGlobalTransformsm_root对象类的实例方法,如果m_rootself的类属性,则语法为:

[self.m_root computeGlobalTransforms]. 

我建议您参考 Learning Objective-C: A Primer 中的 Methods and Messaging。


如果computeGlobalTransformsVA_Bone 方法,则语法为:

VA_Bone *bone = [[VA_Bone alloc] init];
[bone computeGlobalTransforms];

您的bone 变量是一个简单的局部变量,因此不需要引用self.m_root


顺便说一句,按照惯例,变量名和类名中间的下划线一般不用。请参阅 Cocoa 编码指南中的 Naming Properties and Data Types。 另请参阅 使用 Objective-C 编程的 Conventions 中对“骆驼案例”的引用。

因此,对于您的班级,更常见的命名约定是 VABone。同样,对于您提到的原始 m_root 属性,您会 (a) 给它一个更具描述性的名称; (b) 使用骆驼案。现在我不知道m_root 的“m”应该代表什么(单独说明问题),但假设它是用于中等大小的图像,那么它可能是mediumSizedImagesRoot,或者随便。

【讨论】:

我在使用以下代码时遇到问题: VA_Bone *bone = [[VA_Bone alloc] init]; [self.m_root [骨骼计算全局变换]];我想调用 self.m_root 对象上名为 Bone 的类中的 computeGlobalTransforms 方法。这似乎不起作用,我做错了什么? @samb90 查看我修改后的答案。【参考方案2】:

可以使用点符号来调用零参数方法。你绝对不应该。点表示法由编译器处理,而不是由运行时处理 - 有一个非常好的回答类似的问题,它讨论了它为什么工作,以及为什么你不应该使用它(......对于除了 setter/getter 之外的任何东西)这里:

Objective-C dot notation with class methods?

【讨论】:

【参考方案3】:

不,您不能,您只能将 Dot.Notation 用于属性的 setter 和 getter。

【讨论】:

事实并非如此——尽管将它用于除属性之外的任何东西都是一种糟糕的风格:***.com/a/2375991/197143

以上是关于Objective-c中的点符号的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C:发布视图的点

iPhone:如何从Objective-C中的货币符号字符串中获取数字

Ruby 符号的 Objective-C 等价物

如何在 Objective-C 中使用符号断点获取参数

Objective-C 中架构 x86_64 的未定义符号

在 Objective-C 中计算具有不同语言和表情符号的文本的 UILabel 高度