面試復(fù)習(xí)-內(nèi)存管理

  1. timer displayLink會有循環(huán)引用的問題
  • 解決 block+weakSelf卦洽,定制timer內(nèi)部用 NSProxy進(jìn)行轉(zhuǎn)發(fā),解決依賴
  • Timer 里面有 timer 和 proxy抢蚀,timer轉(zhuǎn)發(fā)給proxy,proxy轉(zhuǎn)發(fā)給 realTarget
  1. timer計時器不準(zhǔn)確,使用GCD的定時器更加準(zhǔn)確
  2. 內(nèi)存布局從低到高為

保留區(qū) (最低)
代碼段 (編譯厚的代碼)
數(shù)據(jù)段 (字符串常量,已/未 初始化的全局變量噩峦,靜態(tài)變量)
堆 (分配空間從大到小)
棧 (分配空間從小到大)
內(nèi)核區(qū) (最高)

  1. Tagged Pointer
    64bit后抽兆,引入了此技術(shù)
    未使用 NSNumber對象需要動態(tài)分配內(nèi)存识补,維護(hù)引用計數(shù)
    使用后 指針內(nèi)部變?yōu)?tag+data,數(shù)據(jù)存于指針中辫红,指針不夠存儲凭涂,轉(zhuǎn)為動態(tài)分配內(nèi)存

  2. OC對象的內(nèi)存管理

  • 新創(chuàng)建對象retainCount=1,計數(shù)器=0銷毀厉熟,retain,new,copy等+1导盅,release-1
  • ARC下通過 編譯器特性llvm和runtime進(jìn)行內(nèi)存管理(自動生成setget,自動進(jìn)行runtime清除引用)
  • 方法里有局部對象揍瑟,出了方法立即釋放嗎 (會白翻,arc下會,編譯器特性或者runtime調(diào)用release)
  1. 深淺copy,拷貝的目的是為了產(chǎn)生一個副本對象滤馍,根原對象不影響
    其他對象自定義需實現(xiàn) NSCpoying協(xié)議岛琼,實現(xiàn) copyWithZone

  2. 引用計數(shù)器存儲(https://blog.csdn.net/u013378438/article/details/82790332
    64bit后,引用計數(shù)器放在了優(yōu)化過的isa中巢株,超過了 19位后槐瑞,放sidetable
    sideTable內(nèi)部有 (slock自旋鎖 ,refcnts引用計數(shù)表 weak_table弱引用表)

  3. weak原理
    縱觀weak引用的底層實現(xiàn)阁苞,其實原理很簡單困檩。就是將所有弱引用obj的指針地址都保存在obj對應(yīng)的weak_entry_t中。當(dāng)obj要析構(gòu)時那槽,會遍歷weak_entry_t中保存的弱引用指針地址悼沿,并將弱引用指針指向nil,同時骚灸,將weak_entry_t移除出weak_table糟趾。

  4. dealloc
    釋放函數(shù)依次為 (dealloc) (_objc_rootDealloc) (rootDealloc)(Objc_dispose)(objc_destructInstance)(free)
    在objc_destructInstance將指針變?yōu)閚il

  5. 自動釋放池

  • 自動釋放池的主要底層數(shù)據(jù)結(jié)構(gòu)是 _AutoreleasePool AutoreleasePoolPage,調(diào)用了 Autorelease的對象都是用 AutoreleasePoolPage。
  • 每個 AutoreleasePoolPage占4096個字節(jié)甚牲,除了內(nèi)部成員變量义郑,剩下空間用于放 Autorelease對象地址
  • 內(nèi)部有 thread,parent丈钙,child雙向鏈表
  • 調(diào)用push把 POOL_BOUNDARY 入棧非驮,返回內(nèi)存地址,pop時傳入 POOL_BOUNDARY著恩,
  • 主線程有2個Obsever院尔,runloop Entry時 push
  • runloopBeforeWaiting時 pop,push
  • BeforeExit pop
    (http://www.reibang.com/p/1b66c4d47cd7, )

magic:用來校驗 AutoreleasePoolPage 的結(jié)構(gòu)是否完整喉誊;
next:指向棧頂邀摆,也就是最新入棧的autorelease對象的下一個位置;
thread:指向當(dāng)前線程伍茄;
parent:指向父節(jié)點(diǎn)
child:指向子節(jié)點(diǎn)
depth:表示鏈表的深度栋盹,也就是鏈表節(jié)點(diǎn)的個數(shù)
hiwat:表示high water mark(最高水位標(biāo)記)

轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敷矫,一起剝皮案震驚了整個濱河市例获,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曹仗,老刑警劉巖榨汤,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怎茫,居然都是意外死亡收壕,警方通過查閱死者的電腦和手機(jī)妓灌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜜宪,“玉大人虫埂,你說我怎么就攤上這事∑匝椋” “怎么了掉伏?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長澳窑。 經(jīng)常有香客問我斧散,道長,這世上最難降的妖魔是什么摊聋? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任颅湘,我火速辦了婚禮,結(jié)果婚禮上栗精,老公的妹妹穿的比我還像新娘。我一直安慰自己瞻鹏,他們只是感情好悲立,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著新博,像睡著了一般薪夕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赫悄,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天原献,我揣著相機(jī)與錄音,去河邊找鬼埂淮。 笑死姑隅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倔撞。 我是一名探鬼主播讲仰,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼痪蝇!你這毒婦竟也來了鄙陡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤躏啰,失蹤者是張志新(化名)和其女友劉穎趁矾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體给僵,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毫捣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片培漏。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡溪厘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牌柄,到底是詐尸還是另有隱情畸悬,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布珊佣,位于F島的核電站蹋宦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咒锻。R本人自食惡果不足惜冷冗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惑艇。 院中可真熱鬧蒿辙,春花似錦、人聲如沸滨巴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恭取。三九已至泰偿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜈垮,已是汗流浹背耗跛。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攒发,地道東北人调塌。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像惠猿,于是被迫代替她去往敵國和親烟阐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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

  • CADisplayLink紊扬、NSTimer使用注意 CADisplayLink蜒茄、NSTimer會對target產(chǎn)生...
    lieon閱讀 336評論 0 4
  • 本文中的源代碼來源:需要下載Runtime的源碼,官方的工程需要經(jīng)過大量調(diào)試才能使用餐屎。這里有處理好的objc4-7...
    shen888閱讀 843評論 0 3
  • 在研究Hash表的過程中檀葛,想看iOS當(dāng)中有哪些場景應(yīng)用,最為大家所知的應(yīng)該就是weak關(guān)鍵字的底層原理腹缩,利用網(wǎng)上的...
    佐_籩閱讀 477評論 0 1
  • 內(nèi)存布局 內(nèi)存區(qū)域: 內(nèi)核區(qū)(low) - 程序加載 - 保留(high)程序:未初始化數(shù)據(jù)(.bss)已初始化數(shù)...
    奮斗的老王閱讀 1,108評論 0 50
  • 一.內(nèi)存布局 如上圖,內(nèi)存布局共分為如下幾個區(qū): 內(nèi)核:由系統(tǒng)控制處理的屿聋,大概有占有1個GB 棧:函數(shù)空扎、方法、局部...
    king_jensen閱讀 839評論 0 0