Block詳解

一甜橱、block的基本

用^操作符來聲明一個(gè)Block變量,并指明Block述句的開始。Block的主體部分包含在 {}內(nèi),像下面的例子中一樣(與C語法一樣,“;”指明語句的結(jié)束):

block概念.png
  • block最簡單形式
    定義格式:void (^block名)() = ^{代碼塊;}
    使用格式:block名();
    /*定義時(shí),把block當(dāng)成數(shù)據(jù)類型
    特點(diǎn):1. 類型比函數(shù)定義多了一個(gè) ^2. 設(shè)置數(shù)值,有一個(gè) ^,內(nèi)容是 {} 括起的一段代碼
    最簡單的定義方式
    void (^myBlock)() = ^ { // 代碼實(shí)現(xiàn); }
    /
    void (^myBlock)() = ^ {
    NSLog(@"hello");};
    // 執(zhí)行時(shí),把block當(dāng)成函數(shù)
    myBlock();
        //1) 無參無返回值的block
        //格式:
        //   -定義block變量
        //   返回值類型  (^block變量名)(形參類型列表);
        
        //   -定義block變量并且賦值
        //   返回值類型 (^block變量名)(形參列表)=^(形參列表){  //代碼塊 };
        
        //  形式1: void (^block變量名)() = ^(){};
        //  形式2: void (^block變量名)() = ^{};  //省略了小括號(hào)
        
    - 例1
        1)無參無返回值的block
        void (^sbblock)();  //定義變量
        void (^sb1)()=^(){
            NSLog(@"哈哈,我來了!");
        };
        
        void (^sb2)()=^{
            NSLog(@"哈哈,我又又有來了來了");
        };
        
        // 執(zhí)行block
        //格式: block變量名(實(shí)參);
//        sbblock();  //如果只定義栈戳,就使用岂傲,會(huì)報(bào)錯(cuò),因?yàn)閟bblock沒有初始化
        sb1();
        sb2();
        
        
        2)有參數(shù)無返回值的block
         形參列表的格式:  數(shù)據(jù)類型 變量名
        void (^myblock1)(int a);   // 定義一個(gè)無返回值有一個(gè)參數(shù)的block變量,變量名為myblock1
        
        myblock1 = ^(int a){

            NSLog(@"a = %d",a);

        }; //分號(hào)結(jié)束
        
        myblock1(438);
        
        //3)有參數(shù)\有返回值的block的使用
        // int sum(int a,int b){  return a+b; }
        
        int (^myblock2)(int a,int b)=^(int a,int b){
        
            return a+b;
        };
        
        //執(zhí)行block并且接收block執(zhí)行的結(jié)果
        int sum = myblock2(20,34);  //返回值
        NSLog(@"sum = %d",sum);

2.block的typedef

  • typedef int INT; int 起個(gè)別名 INT

  • typedef int ARR[4]; ARR a1; //定義了一個(gè)長度為4的整形數(shù)組

  • 格式:typedef 返回值類型 (^新別名)(參數(shù)類型列表);
    Typedef int(^MyBlock)(int ,int);

    例1)
    //給無參無返回值block變量起別名;
    //格式: void (^新類型名)();

typedef void (^newType)();
//用新的類型定義block變量
newType t1;
t1 = ^{
NSLog(@"我是使用newType定義出來的變量t1的值");
};
//使用block
t1();

3.block訪問外部變量

在block內(nèi)部可以使用外部變量,但是注意,這是一個(gè)新的內(nèi)存空間變量,以const拷貝的方式

block訪問外部.png

這樣子檀,block可以訪問外部變量镊掖,但是不可以修改

  • 給局部變量加上__block關(guān)鍵字,則這個(gè)局部變量可以在block內(nèi)部進(jìn)行修改。這樣是直接給變量做了一個(gè)從棧區(qū)拷貝到堆區(qū)的變量,使用的是堆區(qū)的變量
//使用__weak兩種
__weak typeof(TWPhotoCollectionViewCell *) weakCell = cell;
__weak HEIMController *selfWeak = self;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末褂痰,一起剝皮案震驚了整個(gè)濱河市亩进,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缩歪,老刑警劉巖归薛,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異匪蝙,居然都是意外死亡苟翻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門骗污,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崇猫,“玉大人,你說我怎么就攤上這事。” “怎么了泞辐?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵今豆,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任议纯,我火速辦了婚禮,結(jié)果婚禮上溢谤,老公的妹妹穿的比我還像新娘瞻凤。我一直安慰自己憨攒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布阀参。 她就那樣靜靜地躺著肝集,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛛壳。 梳的紋絲不亂的頭發(fā)上杏瞻,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音衙荐,去河邊找鬼捞挥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忧吟,可吹牛的內(nèi)容都是我干的树肃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼瀑罗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雏掠?” 一聲冷哼從身側(cè)響起斩祭,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乡话,沒想到半個(gè)月后摧玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绑青,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年诬像,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闸婴。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坏挠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邪乍,到底是詐尸還是另有隱情降狠,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布庇楞,位于F島的核電站榜配,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吕晌。R本人自食惡果不足惜蛋褥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望睛驳。 院中可真熱鬧烙心,春花似錦膜廊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至痘昌,卻和暖如春钥勋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辆苔。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工算灸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驻啤。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓菲驴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骑冗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赊瞬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 轉(zhuǎn)自李峰峰博客 一、概述 閉包 = 一個(gè)函數(shù)「或指向函數(shù)的指針」+ 該函數(shù)執(zhí)行的外部的上下文變量「也就是自由變量」...
    Joshua520閱讀 982評(píng)論 0 0
  • iOS代碼塊Block 概述 代碼塊Block是蘋果在iOS4開始引入的對(duì)C語言的擴(kuò)展,用來實(shí)現(xiàn)匿名函數(shù)的特性,B...
    smile刺客閱讀 2,347評(píng)論 2 26
  • 1贼涩、block簡介 block字面意思就是代碼塊 iOS4.0 Apple引入的特性 block是Objectiv...
    呆子四二閱讀 1,586評(píng)論 1 6
  • 1巧涧、概述 閉包 = 一個(gè)函數(shù)「或指向函數(shù)的指針」+ 該函數(shù)執(zhí)行的外部的上下文變量「也就是自由變量」;Block 是...
    DeerRun閱讀 665評(píng)論 0 0
  • 45
    紅昔昔閱讀 59評(píng)論 0 2