
-
面試問你:請講一下多線程的底層實(shí)現(xiàn),還有線程之間的通信怎么實(shí)現(xiàn)。
IOS的多線程,一般分為三種方式:
- NSThread;
- Operations;
- (GCD) Grand Central Dispatch (iOS4 才開始支持)
1.面試的話,可以這樣簡潔的回答:
1.首先說多線程是什么,
通俗的說就是多個(gè)線程(一個(gè)線程中可以開啟多條線程,每條線程可以并行(同時(shí))執(zhí)行不同的任務(wù));
專業(yè)的說是一個(gè)比較輕量級的方法來實(shí)現(xiàn)單個(gè)應(yīng)用程序內(nèi)多個(gè)代碼執(zhí)行路徑。
2.Mach是第一個(gè)以多線程方式處理任務(wù)的系統(tǒng),因此多線程的底層實(shí)現(xiàn)機(jī)制是基于Mach的線程;
3.開發(fā)中很少用Mach的線程(記住是很少用到的),因?yàn)镸ach級的線程沒有提供多線程的基本特征,它的線程之間是獨(dú)立的。
4.開發(fā)中實(shí)現(xiàn)多線程的方案
- C語言的POSIX接口:#include <pthread.h>;
- OC的NSThread;
- C語言的GCD接口 (性能最好,代碼更精簡);
- OC的NSOperation 和 NSOperation Queen 是基于GCD的;
2.線程之間怎么通信
1. performSelector: onThread: withObject: waitUntilDone:
2.NSMachPort
//舉個(gè)例子:方法一的例子有如下:
1. //子線程與主線程之間的通信
performSelectorOnMainThread: withObject: waitUntilDone:
或者
dispatch_async(dispatch_get_main_queue(), ^{
});
2> //子線程之間的通信
performSelector: onThread: withObject: waitUntilDone:
//等等
/*NSMachPort 的例子
eg.主線程傳給子線程要在子線程中創(chuàng)建一個(gè)對象NSMachPort,這個(gè)對象是與子線程相關(guān)的,子線程創(chuàng)建完后把這個(gè)對象傳給主線程。子線程和NSMachPort的對象通信,就實(shí)現(xiàn)了與主線程的通信。
*/
【code_小馬】
晌午時(shí)光
很喜歡的一篇文章,拿出來和大家分享
【第七集】
你好,”如風(fēng)淡淡的跟她打了個(gè)招呼,扭頭對我說:“姐,回家吧?!薄 芭叮??!蔽覒?yīng)道?! 耙黄鸪詡€(gè)飯吧!旁邊的那家叉燒很棒的!干嗎那么著急回家!你家不是只有你們姐弟倆么?”阿珊攔住我們說?! 拔覀儧]時(shí)間?!比顼L(fēng)冷冰冰的說。 我敷衍了阿珊幾句就和如風(fēng)走了,不知道為什么,我心里美滋滋的,一路上哼著歌?! 霸趺催@么開心?”如風(fēng)問?! 皼]什么?!蔽覔荛_一個(gè)粽子,自己咬了一口,剩下的塞到如風(fēng)嘴里?! ∷櫚櫭颊f:“豆沙太甜,我不愛吃。你快吃,別喝風(fēng)啊?!薄 ⊥砩匣氐郊?,我簡單做了點(diǎn)飯,如風(fēng)吃得很香?! ∥彝?,發(fā)現(xiàn)他真的是英俊的那一類,個(gè)子比前幾年又高了,現(xiàn)在已經(jīng)超過了180,可能從小就干活,手長腳長的,身形很挺拔,劍眉星目,眉宇間有種凜然不可侵犯的霸氣?! ∪顼L(fēng)見我看著他出神,有點(diǎn)不自在的說:“看什么?!薄 ∥乙贿叢磷雷右贿呅χf:“今天你見的阿珊,夸你帥呢!她還想和你交往。” 半響,他都沒回話。我抬頭發(fā)現(xiàn)他以一種極哀傷的表情看著我,和我下午在鏡子中看見的自己一模一樣。 “怎么了?”我不知所措的問?! 八阅憬裉煜挛绨才盼覀儠婷??”如風(fēng)冷冷地說,他從未這樣跟我說過話?! 八敫阏J(rèn)識,所以我……怎么了?”我更加慌亂?! ∪顼L(fēng)猛地站起來,擠翻了凳子,說:“你覺得有意思么?無聊透了!” 他抓起外套走了出去,我在屋里愣了半天,呆呆抓著抹布一動不動。我不知道為什么他突然變成這個(gè)樣子,他從來沒發(fā)過脾氣的。我覺得自己被他拋下了,以前除了他工作我上學(xué),我們都是在一起的,而現(xiàn)在卻只有我一個(gè)人在這個(gè)孤零零的房子里?! ∥也恢涝撛趺醋?,只好坐著等著他,我想等他回來好好發(fā)頓脾氣。但是我明白發(fā)脾氣并不是我苦等他的目的,我有一種深深的恐懼,我怕他再也不回來了,那是我根本不能想象的處境?! “胍?,如風(fēng)回來了,身上帶著股酒味?! ∥乙姷剿阍僖脖锊蛔⌒睦锏奈?,扯了扯嘴角哭了起來?! ∪顼L(fēng)一下子慌了手腳,他坐到我旁邊說:“姐,你怎么還不睡?你別哭,你……” 我哭得更大聲了,使勁捶著他的說:“你怎么能扔下我一個(gè)人!你要是不回來我怎么辦!” 如風(fēng)猛地抓住我的肩膀,盯著我的眼睛說:“姐,我一輩子都不會拋下你一個(gè)人的! 他認(rèn)真的樣子讓我想起我們一起餓肚子的那個(gè)夜晚,那天如風(fēng)拯救了絕望的我,而今天他又一次的讓我從孤單的恐懼中走出。如風(fēng)總會恰如其分的出現(xiàn)在我需要他的地方,每次都是?! 〖绨虮凰盟崃?,我輕輕掙了一下,掛著淚笑著說:“不許跟我生氣了,更不許喝酒!” 如風(fēng)沒松開手,反而更用力,他說:“你也要答應(yīng)我,不管怎么樣,都不能把我拋給別人!不許扔下我一個(gè)人!” 我突然感到他目光的灼熱,這種熱度透過他的手傳到我全身,讓我有種被點(diǎn)燃的感覺?! 拔掖饝?yīng)你。”我恍惚的應(yīng)道,其實(shí)我并不明白他的這個(gè)要求到底是意味著什么,他的態(tài)度和平時(shí)很不一樣,我覺得有一些事情在我懵懵懂懂之間產(chǎn)生了,如風(fēng)一定懂得了些什么我不懂的東西,至少目前我還不懂,或者說我還沒準(zhǔn)備好。 如風(fēng)如釋重負(fù),露出了孩子般燦爛的笑容,他比我更害怕變成一個(gè)人。我們是不能分開的,少了一個(gè)另一個(gè)就根本不知道怎么活下去。
點(diǎn)擊閱讀文章第八集
后續(xù)更新中,喜歡的話 請關(guān)注 【code_小馬】 哦