IOS 内联函数Q&A

Q:YYModel中有一个宏#define force_inline __inline__ __attribute__((always_inline))
并且大量函数都是以内联的形式存在的,那么内联函数有什么用,并且为什么要这样写呢?

A:高级语言都是经过编译器编译成c或汇编语言的,inline __inline__ __attribute__((always_inline))其实是一条编译器指令,编译器会将函数的代码插入到调用该函数的位置,也就是编译的最终代码中这个函数是不存在的,那么既然是强制,就说明编译器有可能拒绝这个请求。


Q:那么这么写有什么好处呢?

A:那么内联函数的好处就是没有普通函数调用的额外开销,OC是一种消息类型的语言调用函数需要很多额外的操作。


Q:那么看起来内联函数跟宏有点像,区别在哪?

A:宏定义是预处理器进行替代的,而内联函数是编译器控制实现的,只有在用到的时候才会展开插入,去掉了函数参数的压栈,减小了开销,我们可以响函数一样调用内联函数,而不用考虑宏一样的问题

推荐阅读更多精彩内容