iOSRoadMap

内联函数,与宏的区别

内联函数 是为了解决函数调用效率的问题

由于函数之间的调用,会从一个内存地址调用到另外一个内存地址,当函数调用完毕之后还会返回原来函数执行的地址,函数调用会有一定的时间开销,引入内联函数是为了解决这一问题

没有使用 内联函数 static inLine:

使用内联函数 static inLine:

结论:

使用 inline 修饰的函数,在编译的时候,会把代码直接嵌入调用代码中.就相当于用 #define 宏定义来定义一个 add 函数那样 与 #define 的区别是:

inline 与 宏的区别
优点相比于函数:

1) inline函数避免了普通函数的,在汇编时必须调用call的缺点:取消了函数的参数压栈,减少了调用的开销,提高效率.所以执行速度确比一般函数的执行速度要快.

2)集成了宏的优点,使用时直接用代码替换(像宏一样);

优点相比于宏:

1)避免了宏的缺点:需要预编译.因为inline内联函数也是函数,不需要预编译.

2)编译器在调用一个内联函数时,会首先检查它的参数的类型,保证调用正确。然后进行一系列的相关检查,就像对待任何一个真正的函数一样。这样就消除了它的隐患和局限性。

3)可以使用所在类的保护成员及私有成员。

inline内联函数的注意事项

1.内联函数只是我们向编译器提供的申请,编译器不一定采取inline形式调用函数.

2.内联函数不能承载大量的代码.如果内联函数的函数体过大,编译器会自动放弃内联.

3.内联函数内不允许使用循环语句或开关语句.

4.内联函数的定义须在调用之前.

Reference

  1. ios 内联函数,与宏的区别以及注意事项