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

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

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

this.m_root.computeGlobalTransforms();

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

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

[self computeGlobalTransforms:m_root];

【问题讨论】:

    标签: java ios objective-c xcode


    【解决方案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。

      【讨论】:

      猜你喜欢
      • 2013-06-17
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2012-09-30
      • 2011-11-19
      • 2010-10-11
      相关资源
      最近更新 更多