iOS內存管理03-Tag Pointer

今天先來簡單介紹下Tagged Pointer技術

  • 從64bit開始,iOS引入了Tagged Pointer技術,用於優化NSNumber、NSDate、NSString等小對象的存儲
  • 在沒有使用Tagged Pointer之前, NSNumber等對象需要動態分配內存、維護引用計數等,NSNumber指針存儲的是堆中NSNumber對象的地址值
  • 使用Tagged Pointer之後,NSNumber指針裡面存儲的數據變成了:Tag + Data,也就是將數據直接存儲在了指針中
  • 當指針不夠存儲數據時,才會使用動態分配內存的方式來存儲數據
  • objc_msgSend能識別Tagged Pointer,比如NSNumber的intValue方法,直接從指針提取數據,節省了以前的調用開銷
  • 如何判斷一個指針是否為Tagged Pointer?iOS平臺,最高有效位是1(第64bit)Mac平臺,最低有效位是1

下篇我們用代碼來具體介紹下各個點的內容,本來想今天搞完的,結果睡過了,先就此別過

iOS內存管理03-Tag Pointer


分享到:


相關文章: