iOS Object-c 對象alloc init 底層原理

曾經(jīng)面試過一個大牛,從金山出來典尾,到京東金融役拴。簡歷送到我面前的時候,感覺他就是夜空中最亮的星钾埂。在面試過程中河闰,記憶猶新的就是問了一個關(guān)于 object-c對象,alloc init 的原理以及和new 的區(qū)別褥紫。我記得很清楚他的回答:alloc init 和new 最后都是malloc 實(shí)現(xiàn)的姜性。對于這一回答我抱著謹(jǐn)慎的科學(xué)的態(tài)度告訴他,這個我沒有驗(yàn)證過髓考,你也可以下來可以通過LLDB部念、匯編分析、以及從蘋果官網(wǎng)下載libObjc.dylib氨菇,下載源碼儡炼,分析一下對象初始化流程。


底層原理分析的三種方式

當(dāng)然查蓉,接下來我也去驗(yàn)證了這個問題乌询,首先我去下載了libobjc的源碼、https://opensource.apple.com/release/macos-1014.html豌研。


下載下來解壓后妹田,build會有error、缺失頭文件鹃共,以及編譯選項(xiàng)的配置鬼佣,參考:http://www.reibang.com/p/28150fa0c085。

如果我們在自己的工程中 command + 點(diǎn)擊 alloc及汉,我們回跳到這樣一個頁面沮趣,


這是系統(tǒng)sdk的頭文件,點(diǎn)擊方法沒法跳進(jìn)去坷随,我們只看到表象房铭,而得不到我們想要探究的實(shí)質(zhì)。但是我們有了objc的源碼温眉,情況就不一樣了缸匪,我們可以跟蹤進(jìn)去看個究竟。這就是人類強(qiáng)大好奇心的驅(qū)使类溢,做技術(shù)要常懷好奇心凌蔬、激發(fā)好奇心露懒,這是一種能力。

alloc方法實(shí)現(xiàn)


rootAlloc方法實(shí)現(xiàn)
_objc_rootAlloc方法實(shí)現(xiàn)


從這里開始有兩個分支砂心,一個是初始化isa懈词,一個是創(chuàng)建一個實(shí)例createInstance。

再往里面跟蹤辩诞,我們回總結(jié)出來一個這樣一個alloc的內(nèi)部實(shí)現(xiàn)流程坎弯。

alloc完整實(shí)現(xiàn)流程

接下來,我們再看看init的實(shí)現(xiàn)译暂、


init實(shí)現(xiàn)


_objc_rootInit實(shí)現(xiàn)


_objc_rootInit 竟然直接返回了 obj抠忘,里面什么也沒有做。那init還拿來干嘛呢外永,這是抽象工廠設(shè)計模式崎脉。

我們自定義一個對象,定義他的屬性伯顶,在它初始化的時候囚灼,它就有一些默認(rèn)值,比如砾淌,占位圖啦撮、占位字符谭网,我們需要重寫init方法汪厨,在它的初始化方法中,給這些屬性賦值愉择。這就是init的作用劫乱!

重寫init
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锥涕,隨后出現(xiàn)的幾起案子衷戈,更是在濱河造成了極大的恐慌,老刑警劉巖层坠,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殖妇,死亡現(xiàn)場離奇詭異,居然都是意外死亡破花,警方通過查閱死者的電腦和手機(jī)谦趣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來座每,“玉大人前鹅,你說我怎么就攤上這事∏褪幔” “怎么了舰绘?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我捂寿,道長口四,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任秦陋,我火速辦了婚禮窃祝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踱侣。我一直安慰自己粪小,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布抡句。 她就那樣靜靜地躺著探膊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪待榔。 梳的紋絲不亂的頭發(fā)上逞壁,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天压鉴,我揣著相機(jī)與錄音砂豌,去河邊找鬼。 笑死樟遣,一個胖子當(dāng)著我的面吹牛雕憔,可吹牛的內(nèi)容都是我干的姿骏。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼斤彼,長吁一口氣:“原來是場噩夢啊……” “哼分瘦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琉苇,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤嘲玫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后并扇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體去团,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年穷蛹,在試婚紗的時候發(fā)現(xiàn)自己被綠了土陪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡俩莽,死狀恐怖旺坠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扮超,我是刑警寧澤取刃,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布蹋肮,位于F島的核電站,受9級特大地震影響璧疗,放射性物質(zhì)發(fā)生泄漏坯辩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一崩侠、第九天 我趴在偏房一處隱蔽的房頂上張望漆魔。 院中可真熱鬧,春花似錦却音、人聲如沸改抡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阿纤。三九已至,卻和暖如春夷陋,著一層夾襖步出監(jiān)牢的瞬間欠拾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工骗绕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藐窄,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓酬土,卻偏偏與公主長得像荆忍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诺凡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361