今天先來簡單介紹下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
下篇我們用代碼來具體介紹下各個點的內容,本來想今天搞完的,結果睡過了,先就此別過
閱讀更多 新新猿類 的文章