iOS中引用計(jì)數(shù)內(nèi)存管理機(jī)制詳解
2015-05-11 15:25:50
1223瀏覽
在 iOS 中引用計(jì)數(shù)是內(nèi)存的管理方式,雖然在 iOS5 版本中,已經(jīng)支持了自動(dòng)引用計(jì)數(shù)管理模式,但理解它的運(yùn)行方式有助于我們了解程序的運(yùn)行原理,有助于 debug 程序。
操作系統(tǒng)的內(nèi)存管理分成堆和棧。
在堆中分配的內(nèi)存,都試用引用計(jì)數(shù)模式;在棧中則不是。
NSString 定義的對象是保存在棧中,所以它沒有引用計(jì)算。看一些書上說它的引用計(jì)算會(huì)是 fffffffff 最大整數(shù),測試的結(jié)果顯示它是- 1. 對該對象進(jìn)行 retain 操作,不好改變它的 retainCount 值。
MutableNSString 定義的對象,需要先分配堆中的內(nèi)存空間,再初始化才能使用。它是采用引用計(jì)數(shù)管理內(nèi)存的。對該對象做 retainCount 操作則每次增加一個(gè)。
其實(shí),引用計(jì)數(shù)是對內(nèi)存區(qū)域的空間管理方式,是應(yīng)從內(nèi)存塊的視角去看的。任何對象都是指向它的指針,有多少個(gè)指針指向它,就有多少個(gè)引用計(jì)算。
如果沒有任何指針指向該內(nèi)存塊了,很明顯,該內(nèi)存塊就沒有對象引用了,引用計(jì)算就是 0, 系統(tǒng)會(huì)人為該內(nèi)存區(qū)域已經(jīng)空閑,于是立即清理,也就是更新一下管理堆的鏈表中某個(gè)標(biāo)示位。
測試方法如下:
在 xcode 中建立一個(gè)非 arc 的項(xiàng)目,單視圖即可。建立一個(gè)按鈕的操作方法。
簡而言之,引用計(jì)數(shù)實(shí)際上是指向其內(nèi)存區(qū)域的指針數(shù),從內(nèi)存塊的角度去理解,就很容易理解了。
標(biāo)簽: