談談 OC 中的內聯函數

內聯函數

即在編譯的時候將函數體替換函數調用,從而不需要將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.







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章