iOS的內(nèi)存管理

一铲敛、引用計數(shù)值存儲位置

OC對象的引用計數(shù)值存儲在對象的isa指針中乡恕,isa的結(jié)構(gòu)如下:

isa結(jié)構(gòu)體:
union isa_t
{
    struct  {
        ...
        uintprt_t has_sidetable_rc;  // 引用計數(shù)是否存在sidetable中
        uintprt_t extra_rc ; // 存儲的值為引用計數(shù)值-1
    }
}

如果has_sidetable_rc==0疮胖,引用計數(shù)值就存儲在extra_rc中;如果has_sidetable_rc ==1设易,表示計數(shù)值超出了extra_rc 的存儲范圍(19個字節(jié))逗柴,此時計數(shù)值存儲在sidetable中。

sideTable結(jié)構(gòu):
struct SideTable {
        spinlock_t slock;
        RefcountMap refcnts;
        weak_table_t weak_table;
}

sideTable的refcnts存儲著引用計數(shù)顿肺,refcnts是個散列表戏溺,存儲數(shù)據(jù)是以對象地址為key,引用計數(shù)值為value存儲屠尊。sideTable是靜態(tài)數(shù)據(jù)旷祸,獲取某個對象引用計數(shù)值時,通過對象地址讼昆,在靜態(tài)的sideTable表中進(jìn)行查找肋僧。

二、如何做到自動釋放的

    1. 工程的main入口有一個autoReleasePool控淡,每個線程內(nèi)部也自帶了autoReleasePool嫌吠。主線程的runloop循環(huán)時會創(chuàng)建一個autoreleasePool,結(jié)束時會會觸發(fā)pool里的內(nèi)存釋放邏輯掺炭,處理完成后銷毀該autoreleasePool辫诅,下個循環(huán)開始時會創(chuàng)建新的pool。子線程不會一直創(chuàng)建涧狮、銷毀pool炕矮。
    1. arc下的對象初始化后么夫,編譯器會自動往后面追加autorelease標(biāo)識,程序運行時就會把這個對象存儲在最近的autoReleasePool中肤视。autoReleasePool要傾倒時档痪,會檢測里面的對象是否有引用計數(shù)為0的,有則觸發(fā)改對象的dealloc邏輯

三邢滑、Dealloc

引用計數(shù)為0時腐螟,會觸發(fā)dealloc方法,dealloc過程是先子類->父類...->NSObject困后。
dealloc做的工作包括:

1. C++函數(shù)釋放: objc_cxxDestruct
2. 移除關(guān)聯(lián)屬性:_object_remove_assocations
3. 將弱引用自動設(shè)置nil: weak_clear_no_lock(&table.weak_table,(id)this)
4. 引用計數(shù)處理:table.refcnts.erase(this)
5. 銷毀對象:free(obj)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乐纸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摇予,更是在濱河造成了極大的恐慌汽绢,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侧戴,死亡現(xiàn)場離奇詭異宁昭,居然都是意外死亡,警方通過查閱死者的電腦和手機酗宋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門久窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人本缠,你說我怎么就攤上這事斥扛。” “怎么了丹锹?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵稀颁,是天一觀的道長。 經(jīng)常有香客問我楣黍,道長匾灶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任租漂,我火速辦了婚禮阶女,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哩治。我一直安慰自己秃踩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布业筏。 她就那樣靜靜地躺著憔杨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒜胖。 梳的紋絲不亂的頭發(fā)上消别,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天抛蚤,我揣著相機與錄音,去河邊找鬼寻狂。 笑死岁经,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛇券。 我是一名探鬼主播缀壤,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怀读!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骑脱,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤菜枷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后叁丧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啤誊,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年拥娄,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚊锹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡稚瘾,死狀恐怖牡昆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摊欠,我是刑警寧澤丢烘,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站些椒,受9級特大地震影響播瞳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜免糕,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一赢乓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧石窑,春花似錦牌芋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棺棵,卻和暖如春楼咳,著一層夾襖步出監(jiān)牢的瞬間熄捍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工母怜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留余耽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓苹熏,卻偏偏與公主長得像碟贾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子轨域,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容