iOS多線程之NSOperations

相關(guān)文章:
iOS多線程之NSThread
iOS多線程之GCD

NSOperation(任務(wù))與NSOperationQueue(隊(duì)列)是在GCD之上構(gòu)建的,但是相較于GCD它具有如下特點(diǎn):

  • 采用面向?qū)ο蟮姆绞?/li>
  • 任務(wù)小泉、隊(duì)列可以被cancel/suspend
  • NSOperation(任務(wù))之間可以添加依賴(dependency)

NSOperationQueue(隊(duì)列)

Api 備注
- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block;
添加任務(wù)到queue
@property NSInteger maxConcurrentOperationCount; 設(shè)置queue的并發(fā)數(shù)芦疏,如果為1則相當(dāng)于是串行隊(duì)列
@property (getter=isSuspended) BOOL suspended 掛起或者取消掛起
@property (nullable, copy) NSString *name 設(shè)置隊(duì)列的名稱
- (void)cancelAllOperations 取消所有任務(wù),
注意:這個(gè)方法只會(huì)將隊(duì)列中所有任務(wù)(NSOperation)的狀態(tài)屬性字段cancelled設(shè)置為YES微姊,并不會(huì)真正的kill掉這個(gè)任務(wù)的線程酸茴,通常需要在自定義的NSOperation內(nèi)部重寫(xiě)main方法(任務(wù)代碼),并在main方法中時(shí)不時(shí)的判斷任務(wù)是否isCancelled兢交,如果是則主動(dòng)中止任務(wù)并返回
+ (nullable NSOperationQueue *)currentQueue 獲取當(dāng)前隊(duì)列薪捍,注意是類方法
+ (NSOperationQueue *)mainQueue 獲取main隊(duì)列

NSOperation (任務(wù))

Api 備注
- (void)start;
- (void)main;
一般我們不需要重載start方法。
1)當(dāng)我們將任務(wù)添加到隊(duì)列的時(shí)候配喳,會(huì)自動(dòng)調(diào)用這個(gè)任務(wù)的start方法 進(jìn)行一些準(zhǔn)備工作酪穿,之后執(zhí)行main方法(核心任務(wù)代碼),
@property (readonly, getter=isCancelled) BOOL cancelled;
- (void)cancel;
設(shè)置任務(wù)狀態(tài)為取消晴裹、判斷任務(wù)是否被取消被济,
注意:cancel并不會(huì)主動(dòng)取消任務(wù),需要在main中根據(jù)isCancelled獲取狀態(tài)并進(jìn)行相應(yīng)的處理涧团。
@property (readonly, getter=isExecuting) BOOL executing 任務(wù)是否正在執(zhí)行
@property (readonly, getter=isFinished) BOOL finished 以下情況時(shí)為YES:
1)任務(wù)完成
2)任務(wù)被取消
3)任務(wù)被暫停
- (void)addDependency:(NSOperation *)op; 添加任務(wù)依賴只磷,當(dāng)前任務(wù)依賴于任務(wù)op,只有任務(wù)op執(zhí)行完成后當(dāng)前任務(wù)才會(huì)開(kāi)始執(zhí)行
- (void)removeDependency:(NSOperation *)op; 刪除任務(wù)依賴
@property NSOperationQueuePriority queuePriority; 任務(wù)優(yōu)先級(jí)
@property (nullable, copy) void (^completionBlock)(void); 設(shè)置任務(wù)完成后執(zhí)行block
@property (nullable, copy) NSString *name 任務(wù)名稱
NSOperation的2個(gè)子類
@interface `NSBlockOperation` : NSOperation 
// 根據(jù)block返回NSBlockOperation實(shí)例
+ (instancetype)blockOperationWithBlock:(void (^)(void))block;

// 添加新的任務(wù)泌绣,這些任務(wù)會(huì)并行執(zhí)行
- (void)addExecutionBlock:(void (^)(void))block;
@property (readonly, copy) NSArray<void (^)(void)> *executionBlocks;

@end
@interface `NSInvocationOperation` : NSOperation 
// 用selector的方式創(chuàng)建任務(wù)
- (nullable instancetype)initWithTarget:(id)target selector:(SEL)sel object:(nullable id)arg;
@end

參考:
How To Use NSOperations and NSOperationQueues

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喳瓣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赞别,更是在濱河造成了極大的恐慌畏陕,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仿滔,死亡現(xiàn)場(chǎng)離奇詭異惠毁,居然都是意外死亡犹芹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)鞠绰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腰埂,“玉大人,你說(shuō)我怎么就攤上這事蜈膨∮炝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵翁巍,是天一觀的道長(zhǎng)驴一。 經(jīng)常有香客問(wèn)我,道長(zhǎng)灶壶,這世上最難降的妖魔是什么肝断? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮驰凛,結(jié)果婚禮上胸懈,老公的妹妹穿的比我還像新娘。我一直安慰自己恰响,他們只是感情好趣钱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著胚宦,像睡著了一般首有。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上间唉,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音利术,去河邊找鬼呈野。 笑死,一個(gè)胖子當(dāng)著我的面吹牛印叁,可吹牛的內(nèi)容都是我干的被冒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轮蜕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼昨悼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起跃洛,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤率触,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后汇竭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體葱蝗,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡穴张,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了两曼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皂甘。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悼凑,靈堂內(nèi)的尸體忽然破棺而出偿枕,到底是詐尸還是另有隱情,我是刑警寧澤户辫,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布渐夸,位于F島的核電站,受9級(jí)特大地震影響寸莫,放射性物質(zhì)發(fā)生泄漏捺萌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一膘茎、第九天 我趴在偏房一處隱蔽的房頂上張望桃纯。 院中可真熱鬧,春花似錦披坏、人聲如沸态坦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)伞梯。三九已至,卻和暖如春帚屉,著一層夾襖步出監(jiān)牢的瞬間谜诫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工攻旦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喻旷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓牢屋,卻偏偏與公主長(zhǎng)得像且预,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烙无,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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

  • 學(xué)習(xí)多線程锋谐,轉(zhuǎn)載兩篇大神的帖子,留著以后回顧截酷!第一篇:關(guān)于iOS多線程涮拗,你看我就夠了 第二篇:GCD使用經(jīng)驗(yàn)與技巧...
    John_LS閱讀 606評(píng)論 0 3
  • 多線程 什么是多線程?多線程就是一個(gè)進(jìn)程中可以開(kāi)啟多條線程,每條線程可以并行執(zhí)行不同的任務(wù),提高執(zhí)行效率;一個(gè)基本...
    西風(fēng)頌閱讀 865評(píng)論 1 16
  • 多線程 在iOS開(kāi)發(fā)中為提高程序的運(yùn)行效率會(huì)將比較耗時(shí)的操作放在子線程中執(zhí)行,iOS系統(tǒng)進(jìn)程默認(rèn)啟動(dòng)一個(gè)主線程,用...
    郭豪豪閱讀 2,587評(píng)論 0 4
  • 在這篇文章中多搀,我將為你整理一下 iOS 開(kāi)發(fā)中幾種多線程方案歧蕉,以及其使用方法和注意事項(xiàng)。當(dāng)然也會(huì)給出幾種多線程的案...
    張戰(zhàn)威ican閱讀 601評(píng)論 0 0
  • 武漢天河機(jī)場(chǎng)正在建設(shè)T4航站樓康铭,框架結(jié)構(gòu)已經(jīng)完成惯退,屋頂復(fù)雜的鋼構(gòu)一覽無(wú)余,在這個(gè)時(shí)候看起來(lái)特別壯觀从藤,建筑工人們站在...
    陳小煩_閱讀 1,639評(píng)論 0 0