10.Objective-C之Block

前言:

本小節(jié)知識點:
1.【了解】什么是Block
2.【理解】block的格式

1.Block的概念:

Block是iOS中一種比較特殊的數據類型
Block是蘋果官方特別推薦使用的數據類型, 應用場景比較廣泛
動畫
多線程
集合遍歷
網絡請求回調
Block的作用
用來保存某一段代碼, 可以在恰當的時間再取出來調用
功能類似于函數和方法

2.Block的格式:

Block的定義格式
返回值類型 (^block變量名)(形參列表) = ^(形參列表) {

};
image.png
block最簡單形式
void (^block名)() = ^{代碼塊;}

例如:
void (^myBlock)() = ^{ NSLog(@"李南江"); };
block帶有參數的block的定義和賦值
void (^block名稱)(參數列表)
= ^ (參數列表) { // 代碼實現; }

例如:
void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
帶有參數和返回值的block
返回類型 (^block名稱)(參數列表)
= ^ (參數列表) { // 代碼實現; }

例如:
int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
調用Block保存的代碼
block變量名(實參);

3.block和typedef的使用:

由于相同的部分可以抽離出來闸与,所以需要使用typedef:
OC的block的用法
#import <Foundation/Foundation.h>
int main(int argc,onst char * argv[])
{
    int (^sumBlock)(int,int);
    sumBlock = ^(int value1,int value2){
        return value1 + value2;
    };
    NSLog(@"sum = %i",sumBlock(20,10));
    
    int (^minBlock)(int,int);
    minBlock = ^(int value1,int value2){
        return value1 - value2;
    };
    NSLog(@"min = %i",minBlock(20,10));
    
    return 0;
}
使用typedef之后:
#import <Foundation/Foundation.h>
typedef int (^calculteBlock)(int,int);
int main(int argc,onst char * argv[])
{
    calculteBlock sumBlock = ^(int value1,int value2){
        return value1 + value2;
    };
    NSLog(@"sum = %i",sumBlock(20,10));    
    calculteBlock minBlock = ^(int value1,int value2){
        return value1 - value2;
    };
    NSLog(@"min = %i",minBlock(20,10));    
    return 0;
}

4.block的應用場景:

在學習UI之后就會體會到block的好處。
如果在block中訪問了外界的對象贸伐,一定要給對象加上__block海洼,只要加上了__block眷昆,哪怕block在堆中纪蜒,也不會對外界的對象進行retain袁稽。
加了__block就是地址傳遞侈沪,不加__block是值傳遞欲虚。正因為是值傳遞集灌,所以可以訪問其值,或者return返回其值复哆。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末欣喧,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子梯找,更是在濱河造成了極大的恐慌唆阿,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锈锤,死亡現場離奇詭異驯鳖,居然都是意外死亡,警方通過查閱死者的電腦和手機久免,發(fā)現死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門浅辙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人阎姥,你說我怎么就攤上這事记舆。” “怎么了呼巴?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵泽腮,是天一觀的道長御蒲。 經常有香客問我,道長诊赊,這世上最難降的妖魔是什么厚满? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮豪筝,結果婚禮上痰滋,老公的妹妹穿的比我還像新娘摘能。我一直安慰自己续崖,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布团搞。 她就那樣靜靜地躺著严望,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逻恐。 梳的紋絲不亂的頭發(fā)上像吻,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音复隆,去河邊找鬼拨匆。 笑死,一個胖子當著我的面吹牛挽拂,可吹牛的內容都是我干的惭每。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼亏栈,長吁一口氣:“原來是場噩夢啊……” “哼台腥!你這毒婦竟也來了?” 一聲冷哼從身側響起绒北,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤黎侈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闷游,有當地人在樹林里發(fā)現了一具尸體峻汉,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年脐往,在試婚紗的時候發(fā)現自己被綠了休吠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡钙勃,死狀恐怖蛛碌,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情辖源,我是刑警寧澤蔚携,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布希太,位于F島的核電站,受9級特大地震影響酝蜒,放射性物質發(fā)生泄漏誊辉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一亡脑、第九天 我趴在偏房一處隱蔽的房頂上張望堕澄。 院中可真熱鬧,春花似錦霉咨、人聲如沸蛙紫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坑傅。三九已至,卻和暖如春喷斋,著一層夾襖步出監(jiān)牢的瞬間唁毒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工星爪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浆西,地道東北人。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓顽腾,卻偏偏與公主長得像近零,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崔泵,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容