2011-11-30 59 views
4

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

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

回答

6

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

+0

+1。一个简单的(也许是愚蠢的)问题。是否有可能在静态函数中使用对象?谢谢。 –

+1

@flexaddicted:是的,但是您将无法使用实例变量(因为没有实例或甚至与函数关联的类)。 – mipadi

+0

非常感谢。 –

2

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