談iOS多線程(NSThread隆判、NSOperation、GCD)編程

一.基本概念

計算機(jī)操作系統(tǒng)都有的基本概念僧界,以下概念簡單方式來描述侨嘀。

進(jìn)程: 一個具有一定獨(dú)立功能的程序關(guān)于某個數(shù)據(jù)集合的一次運(yùn)行活動∥娼螅可以理解成一個運(yùn)行中的應(yīng)用程序咬腕。

線程: 程序執(zhí)行流的最小單元,線程是進(jìn)程中的一個實體葬荷。

同步: 只能在當(dāng)前線程按先后順序依次執(zhí)行涨共,不開啟新線程纽帖。

異步: 可以在當(dāng)前線程開啟多個新線程執(zhí)行,可不按順序執(zhí)行煞赢。

隊列: 裝載線程任務(wù)的隊形結(jié)構(gòu)抛计。

并發(fā): 線程執(zhí)行可以同時一起進(jìn)行執(zhí)行。

串行: 線程執(zhí)行只能依次逐一先后有序的執(zhí)行照筑。

注意:

一個進(jìn)程可有多個線程吹截。

一個進(jìn)程可有多個隊列。

隊列可分并發(fā)隊列和串行隊列凝危。

二.iOS多線程對比

1. NSThread

每個NSThread對象對應(yīng)一個線程波俄,真正最原始的線程。

1)優(yōu)點:NSThread 輕量級最低蛾默,相對簡單懦铺。

2)缺點:手動管理所有的線程活動,如生命周期支鸡、線程同步冬念、睡眠等。

2. NSOperation

自帶線程管理的抽象類牧挣。

1)優(yōu)點:自帶線程周期管理急前,操作上可更注重自己邏輯。

2)缺點:面向?qū)ο蟮某橄箢惼俟梗荒軐崿F(xiàn)它或者使用它定義好的兩個子類:NSInvocationOperation 和 NSBlockOperation裆针。

3. GCD

Grand Central Dispatch (GCD)是Apple開發(fā)的一個多核編程的解決方法。

1)優(yōu)點:最高效寺晌,避開并發(fā)陷阱世吨。

2)缺點:基于C實現(xiàn)。

5. 選擇小結(jié)

1)簡單而安全的選擇NSOperation實現(xiàn)多線程即可呻征。

2)處理大量并發(fā)數(shù)據(jù)耘婚,又追求性能效率的選擇GCD。

3)NSThread本人選擇基本上是在做些小測試上使用陆赋,當(dāng)然也可以基于此造個輪子边篮。

三.場景選擇

圖片異步加載。這種常見的場景是最常見也是必不可少的奏甫。異步加載圖片有分成兩種來說明一下。

第一種凌受,在UI主線程開啟新線程按順序加載圖片阵子,加載完成刷新UI。

第二種胜蛉,依然是在主線程開啟新線程挠进,順序不定地加載圖片色乾,加載完成個字刷新UI。

創(chuàng)作工具上的異步领突。 這個跟上邊任務(wù)調(diào)度道理暖璧,只是為了豐富描述,有助于“舉一反三”效果君旦。如下描述的是app創(chuàng)作小說澎办。

場景一,app本地創(chuàng)作10個章節(jié)內(nèi)容未成同步服務(wù)器金砍,同時發(fā)表這10個章節(jié)產(chǎn)生的一系列動作局蚀,其中上傳內(nèi)容,獲取分配章節(jié)Id恕稠,如何后臺沒有做處理最好方式做異步按順序執(zhí)行琅绅。

場景二,app本地創(chuàng)作列表中有3本小說為發(fā)表鹅巍,同時發(fā)表創(chuàng)作列表中的3本小說千扶,自然考慮并行隊列執(zhí)行發(fā)表。

四.使用方法

第三標(biāo)題場景選擇內(nèi)容實現(xiàn)先留下一個懸念骆捧。具體實現(xiàn)還是先熟知一下各自的API先澎羞。

1. NSThread

1.1)三種實現(xiàn)開啟線程方式:

①.動態(tài)實例化

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(loadImageSource:) object:imgUrl];

thread.threadPriority = 1;// 設(shè)置線程的優(yōu)先級(0.0 - 1.0,1.0最高級)

[thread start];

②.靜態(tài)實例化

[NSThread detachNewThreadSelector:@selector(loadImageSource:) toTarget:self withObject:imgUrl];

③.隱式實例化

[self performSelectorInBackground:@selector(loadImageSource:) withObject:imgUrl];

有了以上的知識點凑懂,可以試探了一下編寫場景選擇中的“圖片加載”的基本功能了煤痕。

1.2)使用這三種方式編寫代碼

//動態(tài)創(chuàng)建線程

-(void)dynamicCreateThread{

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(loadImageSource:) object:imgUrl];

thread.threadPriority = 1;// 設(shè)置線程的優(yōu)先級(0.0 - 1.0,1.0最高級)

[thread start];

}

//靜態(tài)創(chuàng)建線程

-(void)staticCreateThread{

[NSThread detachNewThreadSelector:@selector(loadImageSource:) toTarget:self withObject:imgUrl];

}

//隱式創(chuàng)建線程

-(void)implicitCreateThread{

[self performSelectorInBackground:@selector(loadImageSource:) withObject:imgUrl];

}

-(void)loadImageSource:(NSString *)url{

NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];

UIImage *image = [UIImage imageWithData:imgData];

if (imgData!=nil) {

[self performSelectorOnMainThread:@selector(refreshImageView:) withObject:image waitUntilDone:YES];

}else{

NSLog(@"there no image data");

}

}

-(void)refreshImageView:(UIImage *)image{

[self.imageView setImage:image];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末接谨,一起剝皮案震驚了整個濱河市摆碉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脓豪,老刑警劉巖巷帝,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扫夜,居然都是意外死亡楞泼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門笤闯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堕阔,“玉大人,你說我怎么就攤上這事颗味〕剑” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵浦马,是天一觀的道長时呀。 經(jīng)常有香客問我张漂,道長,這世上最難降的妖魔是什么谨娜? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任航攒,我火速辦了婚禮,結(jié)果婚禮上趴梢,老公的妹妹穿的比我還像新娘漠畜。我一直安慰自己,他們只是感情好垢油,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布盆驹。 她就那樣靜靜地躺著,像睡著了一般滩愁。 火紅的嫁衣襯著肌膚如雪躯喇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天硝枉,我揣著相機(jī)與錄音廉丽,去河邊找鬼。 笑死妻味,一個胖子當(dāng)著我的面吹牛正压,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播责球,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼焦履,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雏逾?” 一聲冷哼從身側(cè)響起嘉裤,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎栖博,沒想到半個月后屑宠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仇让,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年典奉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丧叽。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡卫玖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踊淳,到底是詐尸還是另有隱情假瞬,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站笨触,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏雹舀。R本人自食惡果不足惜芦劣,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望说榆。 院中可真熱鬧虚吟,春花似錦、人聲如沸签财。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唱蒸。三九已至邦鲫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間神汹,已是汗流浹背庆捺。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留屁魏,地道東北人滔以。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像氓拼,于是被迫代替她去往敵國和親你画。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

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