Block 總結(jié)

Block 是OC的一種語(yǔ)法,其用法如下:

//使用block需要注意的問(wèn)題:
//1.聲明block類型的屬性時(shí)懂拾,修飾的關(guān)鍵詞 copy
//2.block要避免閉環(huán)強(qiáng)引用

 1.block的聲明
 2.block的實(shí)現(xiàn)和賦值
 3.block的調(diào)用
 4.block作為函數(shù)的參數(shù)
 5.block作為函數(shù)的返回值

Swift中聲明閉包: var closure:((參數(shù)名:參數(shù)類型,參數(shù)名2:參數(shù)類型,...)->(返回值類型1,返回值類型2,...)) ={(參數(shù)名1,參數(shù)名2,...) in 閉包體 }

//如果回調(diào)只有一種或兩種情況的時(shí)候控漠,使用block進(jìn)行回調(diào)比較方法叙身,如果有多種回調(diào)情況的正勒,采用協(xié)議代理

//1.聲明block的變量 : 返回值(^block變量名)(參數(shù)類型1 參數(shù)名,參數(shù)類型2 參數(shù)名); 聲明時(shí)缺谴,參數(shù)名可以省略捶箱,但是不推薦省略
 void(^blockName)(NSString * str,BOOL success);
 //省略參數(shù)的寫法:void(^blockName1)(NSString *,BOOL);
//2.block的實(shí)現(xiàn)和賦值
blockName = ^(NSString * str,BOOL success){
        //block的實(shí)現(xiàn)部分酿矢,block體
        //聲明和賦值時(shí),block體中的代碼都不會(huì)執(zhí)行
        NSLog(@"執(zhí)行blokc體中的代碼");
    };

//3.調(diào)用block
blockName(@"bwrgrets",YES);
//4.block作為函數(shù)的參數(shù)
這個(gè)有兩種方式實(shí)現(xiàn):
  第一種:提前聲明一個(gè)Block ,然后調(diào)用
  第二種: 函數(shù)調(diào)用的時(shí)候,直接聲明和實(shí)現(xiàn)
# if true

// 第一種實(shí)現(xiàn)方式: 提前聲明一個(gè)block 函數(shù)實(shí)現(xiàn)
    int(^useBlock)(NSString *) = ^(NSString * str){
        NSLog(@"調(diào)用blokc str = %@",str);
        return 0;
    };
    //調(diào)用函數(shù)
    [self useAblock:useBlock];
#else

// 第二種實(shí)現(xiàn)方式
    [self useAblock:^int(NSString *str) {
        NSLog(@"str = %@",str);
        return  1;
    }];
#endif
//使用一個(gè)block作為參數(shù)的方法
-(void)useAblock:(int(^)(NSString * str))block{
    //回調(diào)傳遞過(guò)來(lái)的block
    block(@"sdkjhvgkew");
}
//5:block作為函數(shù)的返回值 (不經(jīng)常使用)
    // 用一個(gè)變量接受一下 函數(shù)返回值
void(^getBlock)() = [self returnABlock];
    //調(diào)用返回的block
    getBlock();


// 返回一個(gè)block 的函數(shù)
-(void(^)())returnABlock{

 /*
// 第一種方式, 定義一個(gè)block
    void(^returnBlock)() = ^{
        NSLog(@"被返回的block被調(diào)用");
    };
    return  returnBlock;

 */
    // 直接返回定義和返回
    return ^{
        //直接返回
        NSLog(@"被返回的block被調(diào)用");
    };
}
附加
//采用self.myBlock 對(duì)block屬性賦值垦江,myBlock聲明時(shí)內(nèi)存相關(guān)的關(guān)鍵詞是 copy ,所有調(diào)用setter方法是帽馋,self對(duì)block實(shí)現(xiàn)部分進(jìn)行了一次強(qiáng)引用

//解決閉環(huán)強(qiáng)引用:讓block對(duì)當(dāng)前對(duì)象的引用變成弱引用,用一個(gè)當(dāng)前類的弱引用類型指針pName指向self,在block體中使用pName去代替self
__weak NewViewController *pName = self;
__unsafe_unretained NewViewController * p = self;
//__weak 修飾,對(duì)象被釋放之后比吭,pName會(huì)被置為nil,不會(huì)造成野指針绽族,比較安全,只能在ARC環(huán)境中使用
//__unsafe_unretained修飾衩藤,對(duì)象被釋放之后吧慢,p不會(huì)置為nil,會(huì)造成野指針,可能會(huì)造成程序崩潰赏表,ARC/MRC環(huán)境中都能使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末检诗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓢剿,更是在濱河造成了極大的恐慌逢慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件间狂,死亡現(xiàn)場(chǎng)離奇詭異攻泼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門忙菠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)何鸡,“玉大人,你說(shuō)我怎么就攤上這事牛欢÷饽校” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵傍睹,是天一觀的道長(zhǎng)隔盛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拾稳,這世上最難降的妖魔是什么骚亿? 我笑而不...
    開(kāi)封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮熊赖,結(jié)果婚禮上来屠,老公的妹妹穿的比我還像新娘。我一直安慰自己震鹉,他們只是感情好俱笛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著传趾,像睡著了一般迎膜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浆兰,一...
    開(kāi)封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天磕仅,我揣著相機(jī)與錄音,去河邊找鬼簸呈。 笑死榕订,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜕便。 我是一名探鬼主播劫恒,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼轿腺!你這毒婦竟也來(lái)了两嘴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤族壳,失蹤者是張志新(化名)和其女友劉穎憔辫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體仿荆,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贰您,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年喧务,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枉圃。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖庐冯,靈堂內(nèi)的尸體忽然破棺而出孽亲,到底是詐尸還是另有隱情,我是刑警寧澤展父,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布返劲,位于F島的核電站,受9級(jí)特大地震影響栖茉,放射性物質(zhì)發(fā)生泄漏篮绿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一吕漂、第九天 我趴在偏房一處隱蔽的房頂上張望亲配。 院中可真熱鬧,春花似錦惶凝、人聲如沸吼虎。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)思灰。三九已至,卻和暖如春混滔,著一層夾襖步出監(jiān)牢的瞬間洒疚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工坯屿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留油湖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓领跛,卻偏偏與公主長(zhǎng)得像肺魁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子隔节,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • BLOCK block的描述: 他是類似函數(shù)指針的一個(gè)代碼塊的內(nèi)聯(lián)封裝, 他可以將一個(gè)函數(shù)體作為對(duì)象傳遞 bloc...
    Chris腦閱讀 292評(píng)論 0 0
  • 前言 人生苦多鹅经,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin怎诫! 什么是Kotlin瘾晃? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,146評(píng)論 9 118
  • { "Unterminated string literal.": "未終止的字符串文本。", "Identifi...
    栗子雨閱讀 7,844評(píng)論 0 3
  • 手持紅豆背西陽(yáng)幻妓。 菊楓又醉秋涼蹦误。 母親雙鬢染銀霜劫拢。 鄉(xiāng)戀悠長(zhǎng)。 近日屢言齊魯强胰, 頻頻憶念家鄉(xiāng)舱沧。 夢(mèng)中宅舍伴池塘。 ...
    魯西道童閱讀 220評(píng)論 2 2
  • 我終于等到這年夏天偶洋,陽(yáng)光將萬(wàn)物都涂抹上燦燦的光熟吏,碧藍(lán)的天空卻把人卷進(jìn)無(wú)盡的虛無(wú)。游樂(lè)場(chǎng)中人們尖叫玄窝、打鬧牵寺。笑聲像...
    絢爛的小哈閱讀 474評(píng)論 0 2