【问题标题】:Objective C / C static method performanceObjective C/C 静态方法性能
【发布时间】:2012-01-10 01:33:14
【问题描述】:

这是来自 Apple 的一些 example code 中的一个类的方法。为什么将此方法定义为静态 C 方法而不是 Objective C 类方法或类方法?在使用它的上下文中,我认为它需要尽可能高性能。这是为什么?这是声明方法的最高效方式吗?

static BOOL lineIntersectsRect(MKMapPoint p0, MKMapPoint p1, MKMapRect r)
{
    //Do stuff
    return MKMapRectIntersectsRect(r, r2);
}

【问题讨论】:

    标签: objective-c c performance methods static


    【解决方案1】:

    C 函数比 Objective C 方法更快,因为 C 函数绕过了 Objective C 运行时消息传递系统。声明中的 static 关键字将函数的可见性限制为当前编译单元,因此它仅在该特定文件中可见。编译器可以从static 关键字中获取提示来优化函数的汇编器输出,从而进一步提高性能。

    【讨论】:

      【解决方案2】:

      它不是静态方法,而是一个函数。它可能被定义为一个函数,因为它对两种不是对象(它们是 C 结构)的数据类型(MKMapPointMKMapRect)进行操作,因此不能有与之关联的方法。

      【讨论】:

      • +1。一个简单(也许是愚蠢)的问题。是否可以在静态函数中使用对象?谢谢。
      • @flexaddicted:是的,但你不能使用实例变量(因为没有实例,甚至没有与函数关联的类)。
      猜你喜欢
      • 1970-01-01
      • 2013-01-29
      • 2011-03-02
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2011-07-23
      • 2011-04-18
      相关资源
      最近更新 更多