我读了关于绕过Objective-C的消息,以获得性能(不相干的这个具体问题),当我发现的代码有趣的一点:在Objective-C类中定义的c函数的范围是什么?
#import <Cocoa/Cocoa.h>
@interface Fib : NSObject { }
- (long long) cFib: (NSUInteger) number;
@end
@implementation Fib
// c implementation of fib
long long cFibIMP(NSUInteger number)
{
return (number < 3) ? 1 : cFib(number - 1) + cFib(number - 2);
}
// method wrapper for c implementation of fib
- (long long) cFib: (NSUInteger) number
{
return cFibIMP(number);
}
@end
我的问题是;当使用c函数时,在一个objective-c对象中,c函数(cFibIMP在这个特定情况下)的作用域是什么? objective-c类是否封装了c函数来消除名称冲突的变化,还是仅仅将c函数转储到整个objective-c程序的全局范围中?
所以对函数声明的静态前置将会限制它的范围到模块呢?这是否适用,即使该静态声明是在@implementation内部进行的,而不是在外部进行(即在源代码文件的开头?) – 2010-03-20 17:36:46