Block簡(jiǎn)介和在GCD中的舉例

Block簡(jiǎn)介

Block的使用

1 如何用block實(shí)現(xiàn) hello worldI逃印8ぁ舷礼!

   void (^aBlock)(void) = ^(void){ NSLog(@"Hello, World!"); };
   aBlock();

解釋一下上面那段東西時(shí)鬼東西把鹃彻。首先 void 表示block的返回值為void。然后就是(^aBlock) 表示這個(gè)block的名字叫 aBlock妻献。然后就是 (void) 表示 這個(gè)block 沒(méi)有參數(shù)蛛株。

簡(jiǎn)而言之就是: 返回類(lèi)型(^Block名字)(形式參數(shù))

然后等號(hào)之后就是一個(gè)類(lèi)似于匿名函數(shù)的東西。^(沒(méi)有參數(shù)){具體實(shí)現(xiàn)}育拨。

Important Pont:Block的內(nèi)存是分配在棧上的谨履。

2 block中修改外部變量
這個(gè)答案是NO。block中不允許隨意修改一般的外部變量熬丧。因?yàn)閎lock支持并行運(yùn)行笋粟,多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)一個(gè)變量是有問(wèn)題的一件事。所以要加 __block.或者是static 變量.

   __block int blockLocal = 100;
   static int staticLocal = 100;
   void (^aBlock)(void) = ^(void){ 
             NSLog(@" >> Sum: %d\n", global + staticLocal);
             global++;
             blockLocal++;
             staticLocal++;
};
aBlock();

Block 在GCD中的總結(jié)

1 結(jié)合GCD在異步隊(duì)列中的block

    dispatch_queue_t queue = dispatch_queue_create("StudyBlocks", NULL);
    dispatch_async(queue, ^(void) 
    {
       int sum = 0;
       for(int i = 0; i < Length; i++)
       sum += data[i];
       NSLog(@" >> Sum: %d", sum);flag = YES;
    });
       // wait util work is done.//
        while (!flag);
       dispatch_release(queue);

如果沒(méi)有這個(gè)while 主線(xiàn)程就會(huì)馬上結(jié)束,因?yàn)?block中的操作時(shí)放在異步線(xiàn)程中的矗钟。家while的目的是為了讓主線(xiàn)程等待唆香,block結(jié)束。

2 block按照 FIFO的原則
block按照 FIFO的原則去執(zhí)行吨艇,也就是先添加到異步隊(duì)列中的block有有限執(zhí)行權(quán)力(同一線(xiàn)程中,遵循FIFO)腾啥。

我們可以通過(guò)型號(hào)量機(jī)制來(lái)看看东涡。

// Create a semaphore with 0 resource
//
__block dispatch_semaphore_t sem = dispatch_semaphore_create(0);
__block dispatch_semaphore_t taskSem = dispatch_semaphore_create(0);

// create dispatch semaphore
//
dispatch_queue_t queue = dispatch_queue_create("StudyBlocks", NULL);

dispatch_block_t task1 = ^(void) {
     int s = 0;
     for (int i = 0; i < Length; i++)
     s += data[i];
     sum = s;

     NSLog(@" >> after add: %d", sum);

     dispatch_semaphore_signal(taskSem);
};

dispatch_block_t task2 = ^(void) {
     dispatch_semaphore_wait(taskSem, DISPATCH_TIME_FOREVER);

     int s = sum;
     for (int i = 0; i < Length; i++)
     s -= data[i];
     sum = s;

     NSLog(@" >> after subtract: %d", sum);
     dispatch_semaphore_signal(sem);
};

dispatch_async(queue, task1);
dispatch_async(queue, task2);

// wait for the semaphore: wait until resource is ready.
//
dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

dispatch_release(taskSem);
dispatch_release(sem);
dispatch_release(queue);

這里大致就是用GCD 實(shí)現(xiàn)了依賴(lài)。

參考和致謝

link:http://www.cnblogs.com/kesalin/archive/2011/08/26/block_dispatch_queue.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末倘待,一起剝皮案震驚了整個(gè)濱河市疮跑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凸舵,老刑警劉巖祖娘,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異啊奄,居然都是意外死亡渐苏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)菇夸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琼富,“玉大人,你說(shuō)我怎么就攤上這事庄新【厦迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵择诈,是天一觀的道長(zhǎng)械蹋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)羞芍,這世上最難降的妖魔是什么哗戈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮涩金,結(jié)果婚禮上谱醇,老公的妹妹穿的比我還像新娘。我一直安慰自己步做,他們只是感情好副渴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著全度,像睡著了一般煮剧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天勉盅,我揣著相機(jī)與錄音佑颇,去河邊找鬼。 笑死草娜,一個(gè)胖子當(dāng)著我的面吹牛挑胸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宰闰,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼茬贵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了移袍?” 一聲冷哼從身側(cè)響起解藻,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葡盗,沒(méi)想到半個(gè)月后螟左,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡觅够,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年胶背,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔚约。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奄妨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苹祟,到底是詐尸還是另有隱情砸抛,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布树枫,位于F島的核電站直焙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砂轻。R本人自食惡果不足惜奔誓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搔涝。 院中可真熱鬧厨喂,春花似錦、人聲如沸庄呈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诬留。三九已至斜纪,卻和暖如春贫母,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盒刚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工腺劣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人因块。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓橘原,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親涡上。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靠柑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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

  • 目錄 一、基本概念1.多線(xiàn)程2.串行和并行吓懈, 并發(fā)3.隊(duì)列與任務(wù)4.同步與異步5.線(xiàn)程狀態(tài)6.多線(xiàn)程方案 二、GC...
    BohrIsLay閱讀 1,573評(píng)論 5 12
  • 1.介紹下內(nèi)存的幾大區(qū)域? 2.你是如何組件化解耦的? 3.runtime如何通過(guò)selector找到對(duì)應(yīng)的IMP...
    小孩仔閱讀 1,655評(píng)論 0 21
  • GCD 深入理解:第一部分 什么是 GCD GCD 是 libdispatch 的市場(chǎng)名稱(chēng)靡狞,而 libdispat...
    willphonez閱讀 617評(píng)論 0 2
  • 昨天晚上夢(mèng)到奶奶,奶奶對(duì)我的終身大事也很操心梢杭,跟著就夢(mèng)到了他温兼,我的初戀男友(他已結(jié)婚)。夢(mèng)里說(shuō)我的真愛(ài)還是他武契,讓我...
    可樂(lè)丸子哲學(xué)家閱讀 446評(píng)論 0 0
  • 1募判、八字陰陽(yáng)是本質(zhì),五行咒唆、十神是表述届垫。 陽(yáng)為虛、為空全释、為清氣装处、為精神,為引導(dǎo)人通向成功的正能量浸船。 陰為實(shí)妄迁、為滿(mǎn)、為...
    GTSsophia閱讀 2,460評(píng)論 0 2