內聯函數
即在編譯的時候將函數體替換函數調用,從而不需要將parameter,returnaddress進行push/pop stack的操作,
從而加速app的運行,然而,會增加二進制文件的大小。
疑問:內聯函數和非內聯函數有很大不同嗎?
解答:對硬件硬性不大,但在性能上有影響。
內聯函數不能保證編譯時候一定是內聯的,內聯僅僅是告訴編譯器請求內聯,但編譯器不一定內聯。
內聯函數的使用場景: OC--->結構體CGRectMake--->在快速賦值的時候就是調用了其內聯函數
CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloaty, CGFloat width, CGFloatheight)
{
CGRect rect;
rect.origin.x = x;rect.origin.y= y;
rect.size.width =width; rect.size.height= height;
return rect;
}
//這會導致編譯器爲內聯函數創建代碼,而不是在堆棧上創建一個函數調用
CG_INLINE is a #define for static inline. This causes the compiler to create the code for thefunction inline, rather that creating a function call on the stack.