NSMutableArray的底層原理
_used 是計數的意思
_list 是緩衝區指針
_size 是緩衝區的大小
_offset 是在緩衝區裏的數組的第一個元素索引
數據結構
正如你會猜測的,__NSArrayM 用了環形緩衝區 (circular buffer)。這個數據結構相當簡單,只是比常規數組或緩衝區複雜點。環形緩衝區的內容能在到達任意一端時繞向另一端。
除非緩衝區滿了,否則在任意一端插入或刪除均不會要求移動任何內存。
任意一端插入或者刪除,只是修改offset參數,不需要移動內存,
我們訪問的時候只是不和普通的數組一樣index多少就是多少,這裏會計算加上offset之後處理的值取數據, 而不是插入頭和尾巴的時候,環形結構會根據最少移動內存指針的方式插入,