iOS开发 CG_INLINE、static inline内联函数

96
LuckyBugGo
2019.05.31 13:41 字数 168

static inlinedefine都是一种宏定义语法。define一般用来预编译常量,static inline一般用来预编译函数。

  1. 在定义函数时,define会引起语义上的歧义
#define MULTI(x) (x*x)

NSLog(@"MULTI(10):%d", MULTI(10));
NSLog(@"MULTI(10+10):%d", MULTI(10+10));

打印结果为:

MULTI(10):100
MULTI(10+10):120

很显然,在处理MULTI(10+10)时,一般理解为:(10+10)*(10+10)=400。但是define只是将x简单替换,所以实际为:10+10*10+10=120

static inline int MULTI2(int x) {
    return x*x;
};

NSLog(@"MULTI2(10):%d", MULTI2(10));
NSLog(@"MULTI2(10+10):%d", MULTI2(10+10));

打印结果为:

MULTI2(10):100
MULTI2(10+10):400

当使用static inline预编译时,不会造成语义上的歧义,而且效率更高。

参考资料

  1. iOS OC内联函数 inline
  2. 内联函数:static inline 和 extern inline 的含义
iOS开发