Runtime

Category 的實(shí)現(xiàn)原理

Category 實(shí)際上是Category_t的結(jié)構(gòu)體,在運(yùn)行時(shí)痛倚,新添加的方法规婆,都被以倒序插入到原有方法列表的最前面,所以不同的Category,添加同一個(gè)方法蝉稳,執(zhí)行的實(shí)際上是最后一個(gè)抒蚜。

Category 在剛剛編譯完的時(shí)候,和原來(lái)的類是分開的耘戚,只有在程序運(yùn)行起來(lái)后嗡髓,通過(guò)Runtime,Category 和原來(lái)的類收津,才會(huì)合并到一起饿这。

isa 指針的理解

isa 等價(jià)于 is kind of
實(shí)例對(duì)象的isa指向類對(duì)象
類對(duì)象指向元類對(duì)象
元類對(duì)象的isa指向元類的基類

isa 有兩種類型
純指針,指向內(nèi)存地址
NON_POINTER_ISA撞秋,除了內(nèi)存地址长捧,還存有其他信息。


isa.png

runtime 如何實(shí)現(xiàn)weak屬性吻贿?

weak 此特征表明該屬性定義了一種【非擁有關(guān)系】唆姐。為這中屬性設(shè)置新值時(shí),設(shè)置方法既不持有新值,也不釋放舊值奉芦。
runtime 對(duì)注冊(cè)的類赵抢,會(huì)進(jìn)行內(nèi)存布局,從一個(gè)粗粒度的概念上來(lái)講声功,這時(shí)候會(huì)有一個(gè)hash表烦却,這是一個(gè)全局表,表中是用weak指向的對(duì)象內(nèi)存地址作為key先巴,用所有指向該對(duì)象的weak指針表作為value其爵。當(dāng)此對(duì)象的引用計(jì)數(shù)為0的時(shí)候會(huì)delloc,假如該對(duì)象內(nèi)存地址是a,那么就會(huì)以a為key伸蚯,在這個(gè)weak表中搜索摩渺,找到所有以a為鍵的weak對(duì)象,從而設(shè)置為nil剂邮。
runtime 如何實(shí)現(xiàn)weak屬性具體流程大致分為3步:
1摇幻、初始化時(shí),runtime會(huì)調(diào)用objc_initWeak函數(shù)挥萌,初始化一個(gè)新的weak指針,指向?qū)ο蟮刂贰?br> 2引瀑、添加引用時(shí):objc_initWeak函數(shù)會(huì)調(diào)用objc_storeWeak()函數(shù)帜矾,objc_storeWeak()的作用是更新指針指向(指針可能原來(lái)指向其他對(duì)象屡萤,這時(shí)候需要將該weak指針與舊對(duì)象接觸綁定,會(huì)調(diào)用到weak_unregister_no_lock)如果指針指向的新對(duì)象非空翔曲,則創(chuàng)建對(duì)應(yīng)的弱引用表,將weak指針與新對(duì)象進(jìn)行綁定掠械,會(huì)調(diào)用到weak_register_no_lock。在這個(gè)過(guò)程中,為了防止多線程中競(jìng)爭(zhēng)沖突,會(huì)有一些鎖的操作层扶。
3镜会、釋放時(shí):調(diào)用clearDeallocating函數(shù),clearDeallocating函數(shù)首先根據(jù)對(duì)象地址獲取所有weak指針地址的數(shù)組扒袖,然后遍歷這個(gè)數(shù)組把其中的數(shù)據(jù)設(shè)為nil野瘦,最后把這個(gè)entry從weak表中刪除吏廉,最后清理對(duì)象的記錄席覆。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晦毙,一起剝皮案震驚了整個(gè)濱河市见妒,隨后出現(xiàn)的幾起案子盐股,更是在濱河造成了極大的恐慌寥院,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沫换,死亡現(xiàn)場(chǎng)離奇詭異垮兑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)私爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門工秩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事迈螟。” “怎么了洗搂?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)载弄。 經(jīng)常有香客問(wèn)我耘拇,道長(zhǎng),這世上最難降的妖魔是什么宇攻? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任惫叛,我火速辦了婚禮,結(jié)果婚禮上逞刷,老公的妹妹穿的比我還像新娘嘉涌。我一直安慰自己,他們只是感情好夸浅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布仑最。 她就那樣靜靜地躺著,像睡著了一般帆喇。 火紅的嫁衣襯著肌膚如雪警医。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天番枚,我揣著相機(jī)與錄音法严,去河邊找鬼损敷。 笑死葫笼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拗馒。 我是一名探鬼主播路星,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诱桂!你這毒婦竟也來(lái)了洋丐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挥等,失蹤者是張志新(化名)和其女友劉穎友绝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肝劲,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迁客,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年郭宝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掷漱。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粘室,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卜范,到底是詐尸還是另有隱情衔统,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布海雪,位于F島的核電站锦爵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奥裸。R本人自食惡果不足惜棉浸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刺彩。 院中可真熱鬧迷郑,春花似錦、人聲如沸创倔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)畦攘。三九已至霸妹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間知押,已是汗流浹背叹螟。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留台盯,地道東北人罢绽。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像静盅,于是被迫代替她去往敵國(guó)和親良价。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • objc_getAssociatedObject返回與給定鍵的特定對(duì)象關(guān)聯(lián)的值蒿叠。ID objc_getAssoci...
    有一種再見叫青春閱讀 1,567評(píng)論 0 7
  • runtime 運(yùn)行時(shí)語(yǔ)言明垢,實(shí)現(xiàn)Object-C的C語(yǔ)言庫(kù),將OC轉(zhuǎn)換成C進(jìn)行編譯的過(guò)渡者市咽。 作為一門動(dòng)態(tài)編程語(yǔ)言...
    夜雨聲煩_閱讀 544評(píng)論 0 0
  • 上篇文章:Runtime在工作中的運(yùn)用 1.objc在向一個(gè)對(duì)象發(fā)送消息時(shí)痊银,發(fā)生了什么? objc在向一個(gè)對(duì)象發(fā)送...
    minjing_lin閱讀 1,079評(píng)論 4 7
  • 參數(shù)自一個(gè)指針施绎,指向類的要接收消息的實(shí)例溯革。 OP在處理該信息的方法的選擇泌射。 ......可變參數(shù)列表包含參數(shù)的方法...
    reallychao閱讀 796評(píng)論 0 0
  • 一、概述 Objective-C語(yǔ)言是一門動(dòng)態(tài)語(yǔ)言鬓照,它將很多靜態(tài)語(yǔ)言在編譯和鏈接期所做的事推遲到運(yùn)行時(shí)處理熔酷。這種動(dòng)...
    Fly晴天里Fly閱讀 1,199評(píng)論 0 6