使用内敛函数的目的
- 为了解决函数调用效率的问题
- 由于函数之间的调用,会从一个内存地址调到另一个内存地址,当函数调用完毕后还会返回原来函数执行的地址,会有一定的时间开销。
内敛函数和普通函数的区别
- 我们都知道函数不管是OC还是C/C++最终都需要编译成汇编指令,才能真正执行。普通函数在被调用的时候需要CPU执行CALL指令不同(需要完成程序计数器压栈->执行要执行的函数语句->出栈程序计数器),内联函数不需要这个调用过程,内联函数在编译的时候,会直接在需要执行内联函数的地方(普通函数执行CALL的汇编语句处)将内联函数的汇编片段copy一份并插入到此处,代替CALL指令(类似于宏定义),而不需要普通函数的CALL指令调用过程。因此内联函数的执行效率是比较高的,但是由于copy代码片段,需要内存消耗,所以内联函数是一种以空间换时间的方法。
使用方法
使用inline
修饰的函数,在编译的时候,会把代码直接嵌入调用代码中。就相当于用#define 宏定义来定义一个add 函数那样!
#define定义的格式要有要求,而使用inline
则就行平常写函数那样,只要加上```inline``即可!
使用#define宏定义的代码,编译器不会对其进行参数有效性检查,仅仅只是对符号表进行替换。
- #define宏定义的代码,其返回值不能被强制转换成可转换的适合的转换类型。
static inline int add(int a, int b){
return a + b;
}
在inline
加上```static``修饰符,只是为了表明该函数只在该文件中可见!也就是说,在同一个工程中,就算在其他文件中也出现同名、同参数的函数也不会引起函数重复定义的错误!
内联函数通常都是比较简单的代码片段,不能包含循环,递归(递归函数的内联扩展可能引起部分编译器的无穷编译)等的复杂流程,代码最好不要超过5行