運(yùn)行循環(huán)&運(yùn)行時(shí)

  1.   實(shí)際上RunLoop 就是一個(gè)函數(shù)杖狼,其內(nèi)部是一個(gè)do-while 循環(huán)充石。當(dāng)你調(diào)用CFRunLoopRun() 時(shí)榛臼,線程就會(huì)一直停留在這個(gè)循環(huán)里;直到超時(shí)或被手動(dòng)停止恩静,該函數(shù)才會(huì)返回焕毫。
    
  2.   作用:通過(guò)RunLoop 機(jī)制實(shí)現(xiàn)省電,流暢驶乾,響應(yīng)速度快邑飒,用戶體驗(yàn)好,做性能優(yōu)化和性能測(cè)試等
    
  3.   特性:
    

a) iOS 中所有的事件監(jiān)聽(tīng)全部由運(yùn)行循環(huán)負(fù)責(zé)

b) 主線程的RunLoop 在應(yīng)用啟動(dòng)的時(shí)候就會(huì)自動(dòng)創(chuàng)建

c) 其他線程則需要在該線程下自己?jiǎn)?dòng)

d) 不能自己創(chuàng)建RunLoop

e) RunLoop 并不是線程安全的级乐,所以需要避免在其他線程上調(diào)用當(dāng)前線程的RunLoop

f) RunLoop 負(fù)責(zé)管理 autorelease pools

g) RunLoop 負(fù)責(zé)處理消息事件疙咸,即輸入源事件、計(jì)時(shí)器事件和網(wǎng)絡(luò)請(qǐng)求事情

  1.   應(yīng)用場(chǎng)景:
    

a) 創(chuàng)建常駐線程风科,執(zhí)行一些會(huì)一直存在的任務(wù)撒轮。該線程的生命周期跟App 相同

b) 維護(hù)線程的生命周期,讓線程不自動(dòng)退出贼穆,isFinished 為Yes 時(shí)退出

c) 在一定時(shí)間內(nèi)監(jiān)聽(tīng)某種事件题山,或執(zhí)行某種任務(wù)的線程

  1.   蘋果使用RunLoop實(shí)現(xiàn)的功能:AutoreleasePool、事件響應(yīng)故痊、手勢(shì)識(shí)別顶瞳、界面更新、定時(shí)器等
    
  2.   蘋果不允許直接創(chuàng)建RunLoop,它只提供了兩個(gè)自動(dòng)獲取的函數(shù):CFRunLoopGetMain() 和CFRunLoopGetCurrent()慨菱。線程和RunLoop 之間是一一對(duì)應(yīng)的焰络,其關(guān)系是保存在一個(gè)全局的Dictionary 里。線程剛創(chuàng)建時(shí)并沒(méi)有RunLoop抡柿,如果你不主動(dòng)獲取,那它一直都不會(huì)有等恐。RunLoop 的創(chuàng)建是發(fā)生在第一次獲取時(shí)洲劣,RunLoop 的銷毀是發(fā)生在線程結(jié)束時(shí)。你只能在一個(gè)線程的內(nèi)部獲取其RunLoop(主線程除外)
    
  3.   Runloop實(shí)際應(yīng)用
    
    [[NSThread currentThread] setName:@"AFNetworking"];
    
    NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
    
     // 這里主要是監(jiān)聽(tīng)某個(gè)port课蔬,目的是讓這個(gè)runloop不會(huì)退出囱稽,Thread 不會(huì)回收
    
    [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
    
     [runLoop run];
    

RunTime

  1.   簡(jiǎn)介:運(yùn)行時(shí)是一種面向?qū)ο蟮木幊陶Z(yǔ)言的運(yùn)行環(huán)境,類似于java 的虛擬機(jī)二跋,OC 最主要的特點(diǎn)就是在程序運(yùn)行時(shí)战惊,以發(fā)送消息的方式調(diào)用方法,運(yùn)行時(shí)是OC 的核心扎即,運(yùn)行時(shí)系統(tǒng)庫(kù)API定義了一系列數(shù)據(jù)類型吞获、函數(shù)和常量。運(yùn)行時(shí)系統(tǒng)庫(kù)的公用API是使用C語(yǔ)言編寫的谚鄙。
    
  2.   運(yùn)行時(shí)在開(kāi)發(fā)中的主要應(yīng)用場(chǎng)景:
    

a) 字典轉(zhuǎn)模型

                 i.           使用class_copyPropertyList獲取屬性數(shù)組

                ii.           遍歷字典得到屬性名字

               iii.           使用KVC設(shè)置屬性的值各拷;setValue:forKey:

b) 給分類增加關(guān)聯(lián)對(duì)象,開(kāi)發(fā)框架時(shí)解耦闷营,動(dòng)態(tài)添加屬性

                 i.           使用運(yùn)行時(shí)函數(shù)objc_getAssociatedObject(類烤黍,屬性名)獲取關(guān)聯(lián)的屬性

                ii.           使用運(yùn)行時(shí)函數(shù)objc_setAssociatedObject(類,屬性名傻盟,屬性實(shí)例速蕊,內(nèi)存管理類別)動(dòng)態(tài)添加關(guān)聯(lián)對(duì)象

c) 交換方法,在無(wú)法修改系統(tǒng)或者第三方框架的方法時(shí)娘赴,利用交換方法规哲,先執(zhí)行自己的方法,在執(zhí)行系統(tǒng)或者第三方的框架的方法诽表,這是黑魔法媳叨,對(duì)系統(tǒng)或者框架版本有很強(qiáng)的依賴性

                 i.           使用運(yùn)行時(shí)函數(shù)class_getInstanceMethod(類,SEL)獲取實(shí)例方法

                ii.           使用運(yùn)行時(shí)函數(shù)method_exchangeImplementations(方法1关顷,方法2)交換2個(gè)方法的實(shí)際入口
  1.   第三方的運(yùn)作場(chǎng)景
    

a) 在AFN的AFURLSessionManager.m文件中糊秆,第363行就使用了交叉方法函數(shù)

b) 在AFN中,還使用了運(yùn)行時(shí)函數(shù)class_addMethod添加方法

  1.   常用的運(yùn)行時(shí)方法:
    
QQ20161107-2.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末议双,一起剝皮案震驚了整個(gè)濱河市痘番,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖汞舱,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伍纫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡昂芜,警方通過(guò)查閱死者的電腦和手機(jī)莹规,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)泌神,“玉大人良漱,你說(shuō)我怎么就攤上這事』都剩” “怎么了母市?”我有些...
    開(kāi)封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)损趋。 經(jīng)常有香客問(wèn)我患久,道長(zhǎng),這世上最難降的妖魔是什么浑槽? 我笑而不...
    開(kāi)封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任蒋失,我火速辦了婚禮,結(jié)果婚禮上桐玻,老公的妹妹穿的比我還像新娘高镐。我一直安慰自己,他們只是感情好畸冲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布嫉髓。 她就那樣靜靜地躺著,像睡著了一般邑闲。 火紅的嫁衣襯著肌膚如雪算行。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天苫耸,我揣著相機(jī)與錄音州邢,去河邊找鬼。 笑死褪子,一個(gè)胖子當(dāng)著我的面吹牛量淌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫌褪,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呀枢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了笼痛?” 一聲冷哼從身側(cè)響起裙秋,我...
    開(kāi)封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤琅拌,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后摘刑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體进宝,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年枷恕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了党晋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徐块,死狀恐怖未玻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛹锰,我是刑警寧澤深胳,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布绰疤,位于F島的核電站铜犬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轻庆。R本人自食惡果不足惜癣猾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望余爆。 院中可真熱鬧纷宇,春花似錦、人聲如沸蛾方。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桩砰。三九已至拓春,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亚隅,已是汗流浹背硼莽。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煮纵,地道東北人懂鸵。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像行疏,于是被迫代替她去往敵國(guó)和親匆光。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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