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】:如果computeGlobalTransforms
是m_root
对象类的实例方法,如果m_root
是self
的类属性,则语法为:
[self.m_root computeGlobalTransforms].
我建议您参考 Learning Objective-C: A Primer 中的 Methods and Messaging。
如果computeGlobalTransforms
是VA_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中的点符号的主要内容,如果未能解决你的问题,请参考以下文章