ios多線程編程簡(jiǎn)介

iOS的多線程跟其他像c語言創(chuàng)建的線程的概念不太一樣蓖宦。

多線程模型為一個(gè)個(gè)block組成的queue來實(shí)現(xiàn)多線程編程,無須自己創(chuàng)建線程。

在ios系統(tǒng)底層為你創(chuàng)建了線程池,我們編寫APP只需關(guān)心我們需要完成的任務(wù)block和queue

queue由一個(gè)個(gè)block排隊(duì)組成恼蓬,最前面的queue在系統(tǒng)取走去執(zhí)行block中的代碼,后面的block就會(huì)接上捷枯,一個(gè)queue對(duì)應(yīng)一個(gè)線程會(huì)者幾個(gè)線程 我們無需關(guān)心這個(gè)滚秩。

1. queue

queue分兩種 ?分別是主隊(duì)列和其他隊(duì)列, 其中主隊(duì)列專門負(fù)責(zé)UI同步和不能被阻塞(需要監(jiān)聽用戶及時(shí)響應(yīng)用戶的觸控)淮捆, 任何需要復(fù)雜計(jì)算 持續(xù)時(shí)間長(zhǎng)的行為都交由其他隊(duì)列執(zhí)行。

queue類型:dispatch_queue_t?

創(chuàng)建 queue:?

dispatch_queue_t otherQueue = dispatch_queue_create("queueName", nil);

獲取主隊(duì)列:

?dispatch_get_main_queue();

或者?[NSOperationQueue mainQueue];

2. block

oc中稱為代碼塊 就是其他語言中的匿名函數(shù)和函數(shù)式編程

基本格式 :^(參數(shù)類型 參數(shù)1本股,參數(shù)類型 參數(shù)2) { 需要執(zhí)行的代碼}

3. 如何把需要執(zhí)行的任務(wù)block放入queue攀痊?

通過 diapatch_async( queue, ^{ } ); ?異步方式調(diào)用

還有一種更簡(jiǎn)單的來讓main queue來執(zhí)行block的方式

- (void)performSelectorOnMainThread:(SEL)aMethod?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? withObject:object?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? waitUntilDone:(BOOL)waitUntilDone;

ps: 如何判斷block在哪個(gè)queue,沒有顯示的用dispatch_async函數(shù)指定那就看你block所在函數(shù)是在哪個(gè)queue執(zhí)行就表示block也在那個(gè)queue中拄显。不在main queue的block想執(zhí)行UI操作需回調(diào)main queue來實(shí)現(xiàn).

例子:

根據(jù)網(wǎng)絡(luò)URL下載對(duì)應(yīng)的文件

NSURLRequest *request = [NSURLRequest requestWithURL:

[NSURL URLWithString:@"http://..."]];

NSURLSessionConfiguration * configuration = ...... ;

NSURLSession * session = ...... ;

NSURLSessionDownloadTask *task;

task = [session downloadTaskWithRequest:request?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {

/* 想做一些UI動(dòng)作 能不能執(zhí)行苟径? */ ? ? ? ?@1

}];

下載完成的回調(diào)函數(shù)completionHandler是不是在main queue中,是的話可以直接寫ui代碼躬审,不是則要通過函數(shù)dispatch_async回調(diào)main queue來進(jìn)行操作棘街。

接上面的例子代碼 其中session為:

NSURLSession * session = ?[NSURLSession sessionWithConfiguration:configuration delegate:nil ?delegateQueue:[NSOperationQueue mainQueue]];

這樣創(chuàng)建session指定了是在main queue中執(zhí)行下載任務(wù) 即completionHandler在main queuqe中 在@1處可以直接執(zhí)行UI操作

相反

NSURLSession *session =

[NSURLSession sessionWithConfiguration:configuration];

是指派了otherQueue來執(zhí)行下載任務(wù) 所以在 @1 處想執(zhí)行ui操作需回調(diào)main queue

@1處此時(shí)代碼為:

dispatch_async([NSOperationQueue mainQueue], ^{/* ?UI操作 */}); 或者

[self performSelectorOnMainThread:@selector(doUIthings)

withObject:nil ?waitUntilDone: NO];

所以多線程入門 只需理解幾個(gè)概念就行

queue與block的編程模型

main queue和其他queue的不同(main queue 1. 不能阻塞 2. 專門負(fù)責(zé)ui)

其他的像創(chuàng)建queue , 把block放入queue等函數(shù)都必須清楚承边。

水平有限 歡迎指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遭殉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子博助,更是在濱河造成了極大的恐慌险污,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛔糯,居然都是意外死亡拯腮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蚁飒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來动壤,“玉大人,你說我怎么就攤上這事淮逻±堑纾” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵弦蹂,是天一觀的道長(zhǎng)肩碟。 經(jīng)常有香客問我,道長(zhǎng)凸椿,這世上最難降的妖魔是什么削祈? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮脑漫,結(jié)果婚禮上髓抑,老公的妹妹穿的比我還像新娘。我一直安慰自己优幸,他們只是感情好吨拍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著网杆,像睡著了一般羹饰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碳却,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天队秩,我揣著相機(jī)與錄音,去河邊找鬼昼浦。 笑死馍资,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的关噪。 我是一名探鬼主播鸟蟹,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼使兔!你這毒婦竟也來了建钥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤火诸,失蹤者是張志新(化名)和其女友劉穎锦针,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奈搜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年悉盆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馋吗。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡焕盟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宏粤,到底是詐尸還是另有隱情脚翘,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布绍哎,位于F島的核電站来农,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏崇堰。R本人自食惡果不足惜沃于,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望海诲。 院中可真熱鬧繁莹,春花似錦、人聲如沸特幔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚯斯。三九已至薄风,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間溉跃,已是汗流浹背村刨。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撰茎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓打洼,卻偏偏與公主長(zhǎng)得像龄糊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子募疮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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

  • IOS多線程編程簡(jiǎn)介 基本概念 線程: 線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位炫惩。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)...
    koula閱讀 658評(píng)論 3 4
  • Dispatch Queues dispatch queues是執(zhí)行任務(wù)的強(qiáng)大工具阿浓,允許你同步或異步地執(zhí)行任意代碼...
    YangPu閱讀 648評(píng)論 0 4
  • 歡迎大家指出文章中需要改正或者需要補(bǔ)充的地方他嚷,我會(huì)及時(shí)更新,非常感謝。 一. 多線程基礎(chǔ) 1. 進(jìn)程 進(jìn)程是指在系...
    xx_cc閱讀 7,197評(píng)論 11 70
  • NSThread 第一種:通過NSThread的對(duì)象方法 NSThread *thread = [[NSThrea...
    攻城獅GG閱讀 803評(píng)論 0 3
  • 腳踩九州山筋蓖,發(fā)裁九霄簾卸耘。若問蒼茫何處是?星光裊裊定是煙粘咖。
    霾里挑燈看劍閱讀 309評(píng)論 0 0