IOS多線程-NSOperation

NSOperation

  • NSOperation的作用
    • 配合使用NSOperation(操作)和NSOperationQueue(隊(duì)列)也可以實(shí)現(xiàn)多線程編程
  • NSOperation和NSOperationQueue實(shí)現(xiàn)多線程的具體步驟
    • 1.先將需要執(zhí)行的操作封裝到NSOperation對(duì)象中
    • 2.將NSOperation對(duì)象添加到NSOperationQueue(隊(duì)列)中
    • 3.系統(tǒng)會(huì)自動(dòng)將NSOperationQueue中的NSOperation取出來
    • 4.將取出的NSOperation封裝的操作放到一條新線程中執(zhí)行
    • (如果隊(duì)列的最大線程數(shù)為1的話,就不會(huì)創(chuàng)建新的線程)

NSOperationQueue的隊(duì)列類型

  • 主隊(duì)列
    • [NSOperationQueue mainQueue]
    • 凡是添加到主隊(duì)列中的任務(wù)(NSOperation)炬搭,都會(huì)放到主線程中執(zhí)行
  • 非主隊(duì)列(其他隊(duì)列)
    • [[NSOperationQueue alloc] init]
    • 同時(shí)包含了:串行呈宇、并發(fā)功能
    • 添加到這種隊(duì)列中的任務(wù)(NSOperation),就會(huì)自動(dòng)放到子線程中執(zhí)行

如何創(chuàng)建隊(duì)列

//自己創(chuàng)建隊(duì)列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
//獲取主隊(duì)列
NSOperationQueue *queue = [[NSOperationQueue mainQueue]
  • 隊(duì)列的掛起屬性:
    • 這個(gè)屬性決定是否把隊(duì)列里的任務(wù)掛起,但是任務(wù)是原子性的,不會(huì)馬上結(jié)束一個(gè)任務(wù),而是會(huì)當(dāng)前任務(wù)真正結(jié)束的時(shí)候才會(huì)被掛起
    • @property (getter=isSuspended) BOOL suspended;
  • 隊(duì)列的最大線程數(shù)屬性:
    • 決定了這個(gè)隊(duì)列最多可以創(chuàng)建多少個(gè)線程
    • @property NSInteger maxConcurrentOperationCount;
  • 隊(duì)列添加任務(wù)的方法:
    • 用這個(gè)方法添加進(jìn)隊(duì)列后,就會(huì)自動(dòng)開始任務(wù)
    • (void)addOperation:(NSOperation *)op;

如何創(chuàng)建任務(wù)

//方式1,執(zhí)行這個(gè)任務(wù)的時(shí)候會(huì)自動(dòng)調(diào)用opRunOne這個(gè)自定義的函數(shù)
NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(opRunOne) object:nil];
//方式2
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"op3------%@",[NSThread currentThread]);
    }];
  • 任務(wù)的開始方法:
    • -(void)start;
  • 一個(gè)任務(wù)可以自己寫成一個(gè)類,把要執(zhí)行的操作寫在下面這個(gè)函數(shù)里
    • -(void)main;
  • 任務(wù)的取消屬性以及方法:使用這個(gè)方法可以取消正在執(zhí)行的任務(wù)
    • @property (readonly, getter=isCancelled) BOOL cancelled;
    • (void)cancel;
  • 任務(wù)添加依賴的方法:如果希望A任務(wù)在其他的任務(wù)都執(zhí)行完才執(zhí)行的話,就給A任務(wù)添加其他任務(wù)的依賴?yán)?[A addDependency:B];
    • -(void)addDependency:(NSOperation *)op;
  • 用這個(gè)方法添加的代碼會(huì)在自動(dòng)創(chuàng)建的一個(gè)新的線程里運(yùn)行:- (void)addExecutionBlock:(void (^)(void))block;

NSOperation線程間通信的方法

  • 與GCD類似
 [[[NSOperationQueue alloc] init] addOperationWithBlock:^{
        //在自定義的隊(duì)列中執(zhí)行的代碼
       __block UIImageView *image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"123"]];
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
           //在main隊(duì)列中執(zhí)行的代碼
            image = nil;
        }];
    }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件强霎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蓉冈,警方通過查閱死者的電腦和手機(jī)城舞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門轩触,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椿争,你說我怎么就攤上這事怕膛。” “怎么了秦踪?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵褐捻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我椅邓,道長(zhǎng)柠逞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任景馁,我火速辦了婚禮板壮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘合住。我一直安慰自己绰精,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布透葛。 她就那樣靜靜地躺著笨使,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僚害。 梳的紋絲不亂的頭發(fā)上硫椰,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音萨蚕,去河邊找鬼靶草。 笑死,一個(gè)胖子當(dāng)著我的面吹牛岳遥,可吹牛的內(nèi)容都是我干的奕翔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼浩蓉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼糠悯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妻往,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎试和,沒想到半個(gè)月后讯泣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阅悍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年好渠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昨稼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拳锚,死狀恐怖假栓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霍掺,我是刑警寧澤匾荆,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站杆烁,受9級(jí)特大地震影響牙丽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兔魂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一烤芦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧析校,春花似錦构罗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至尚困,卻和暖如春蠢箩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背事甜。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工谬泌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逻谦。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓掌实,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親邦马。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贱鼻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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

  • 和GCD的對(duì)比 操作隊(duì)列,比GCD更早滋将,GCD在設(shè)計(jì)上很多都是基于操作隊(duì)列的原理構(gòu)建的邻悬。在iOS4之后,操作隊(duì)列的...
    doudo閱讀 187評(píng)論 0 0
  • 1. NSOperation簡(jiǎn)介 在某些情況下随闽,執(zhí)行后臺(tái)任務(wù)GCD不一定是最好的方式父丰,還有一種技術(shù)叫做操作隊(duì)列NS...
    Claire_wu閱讀 1,049評(píng)論 0 0
  • NSOperation是蘋果提供給我們的一套多線程解決方案。實(shí)際上它是在ios4后基于GCD開發(fā)的掘宪,但是比GCD擁...
    艷曉閱讀 223評(píng)論 0 2
  • 一蛾扇、簡(jiǎn)介 NSOperation 的作用NSOperation 是對(duì) GCD 的一層封裝攘烛,更加面向?qū)ο蟆?配合使用...
    hrscy閱讀 446評(píng)論 0 3
  • sunshine147閱讀 166評(píng)論 0 0