标签:
在iOS中的一些框架中,static inline是经常出现的关键字组合.
static inline CGFloat CGFloatFromPixel(CGFloat value) {
return value / YYScreenScale();
}
//YYScreenScale()方法说明:
CGFloat YYScreenScale() {
static CGFloat scale;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
scale = [UIScreen mainScreen].scale;
});
return scale;
}
虽然static inline修饰的是函数(或者方法,swift出来后,我觉着方法==函数,朋友们不用咬文嚼字,鄙视我辈了).但它在这里就是宏的作用,即你可以将CGFloatFromPixel当作一个宏.
当然inline函数与宏有区别,inline可以:
优点相比于函数:
1) inline函数避免了普通函数的,在汇编时必须调用call的缺点:取消了函数的参数压栈,减少了调用的开销,提高效率.所以执行速度确比一般函数的执行速度要快.
2)集成了宏的优点,使用时直接用代码替换(像宏一样);
优点相比于宏:
1)避免了宏的缺点:需要预编译.因为inline内联函数也是函数,不需要预编译.
2)编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。
3)可以使用所在类的保护成员及私有成员。
http://stackoverflow.com/questions/11985307/static-extern-and-inline-in-objective-c
http://tigcc.ticalc.org/doc/gnuexts.html#SEC93
标签:
原文地址:http://www.cnblogs.com/wyk19910103/p/5660627.html