iOS中block的介紹和所有用法

iOS中block的介紹和所有用法

在 Objective-C(OC)中骡送,block 是一種可以在代碼中傳遞和使用的代碼塊世杀【屙铮可以把它理解為一個小的乳幸、可重用的代碼片段瞪讼。

**一、什么是 block**

可以把 block 想象成一個小包裹粹断,里面裝著一些代碼符欠。這個包裹可以在不同的地方傳遞,當需要的時候就可以打開包裹執(zhí)行里面的代碼瓶埋。

**二希柿、block 的基本語法**

1. 定義一個 block:

? ```objective-c

? returnType (^blockName)(parameterTypes) = ^returnType(parameters) {

? ? ? // block 的代碼

? ? ? return returnValue;

? };

? ```

? 例如:

? ```objective-c

? int (^multiplyBlock)(int, int) = ^int(int a, int b) {

? ? ? return a * b;

? };

? ```

? 這里定義了一個名為`multiplyBlock`的 block,它接受兩個整數(shù)參數(shù)并返回它們的乘積养筒。

2. 調(diào)用 block:

? 就像調(diào)用函數(shù)一樣曾撤,使用 block 的名稱加上括號并傳入?yún)?shù):

? ```objective-c

? int result = multiplyBlock(5, 3);

? ```

**三、block 的用法**

1. 作為參數(shù)傳遞給方法:

? 可以將 block 作為參數(shù)傳遞給方法晕粪,這樣方法就可以在合適的時候執(zhí)行這個 block挤悉。

? ```objective-c

? - (void)doSomethingWithBlock:(void (^)(void))block {

? ? ? // 做一些事情

? ? ? block();

? }

? ```

? 使用時:

? ```objective-c

? [self doSomethingWithBlock:^{

? ? ? NSLog(@"This is inside the block.");

? }];

? ```

2. 在方法中返回 block:

? 一個方法可以返回一個 block,這樣調(diào)用者可以獲得一個可執(zhí)行的代碼塊巫湘。

? ```objective-c

? - (void (^)(void))getBlock {

? ? ? return ^{

? ? ? ? ? NSLog(@"This is the returned block.");

? ? ? };

? }

? ```

? 使用時:

? ```objective-c

? void (^myBlock)(void) = [self getBlock];

? myBlock();

? ```

3. 存儲在變量中:

? 就像前面的例子一樣装悲,可以將 block 存儲在變量中,以便在不同的地方使用尚氛。

4. 用于異步操作:

? 在異步操作完成時執(zhí)行特定的代碼诀诊。比如網(wǎng)絡(luò)請求完成后更新界面:

? ```objective-c

? [someNetworkRequestWithCompletionHandler:^(NSData *data, NSError *error) {

? ? ? if (!error) {

? ? ? ? ? // 處理數(shù)據(jù)

? ? ? ? ? NSLog(@"Data received: %@", data);

? ? ? } else {

? ? ? ? ? // 處理錯誤

? ? ? ? ? NSLog(@"Error: %@", error);

? ? ? }

? }];

? ```

**四、注意事項**

1. 循環(huán)引用問題:

? 如果在 block 中引用了外部的對象阅嘶,而這個對象又持有了這個 block属瓣,就可能會導(dǎo)致循環(huán)引用⊙度幔可以使用`__weak`或`__block`來解決這個問題奠涌。

? ```objective-c

? __weak typeof(self) weakSelf = self;

? [someAsyncOperationWithCompletion:^{

? ? ? [weakSelf doSomething];

? }];

? ```

2. block 可以訪問外部變量:

? 在 block 中可以訪問定義它的作用域中的變量。但是這些變量默認是只讀的磷杏,如果要修改溜畅,需要使用`__block`修飾符。

? ```objective-c

? __block int count = 0;

? void (^incrementBlock)(void) = ^{

? ? ? count++;

? };

? incrementBlock();

? ```

總之极祸,block 是 Objective-C 中非常強大的特性慈格,可以讓代碼更加靈活和可重用。通過合理地使用 block遥金,可以簡化代碼結(jié)構(gòu)浴捆,提高開發(fā)效率。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稿械,一起剝皮案震驚了整個濱河市选泻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖页眯,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梯捕,死亡現(xiàn)場離奇詭異,居然都是意外死亡窝撵,警方通過查閱死者的電腦和手機傀顾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碌奉,“玉大人短曾,你說我怎么就攤上這事〈土樱” “怎么了嫉拐?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長魁兼。 經(jīng)常有香客問我婉徘,道長,這世上最難降的妖魔是什么璃赡? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任判哥,我火速辦了婚禮献雅,結(jié)果婚禮上碉考,老公的妹妹穿的比我還像新娘。我一直安慰自己挺身,他們只是感情好侯谁,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著章钾,像睡著了一般墙贱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贱傀,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天惨撇,我揣著相機與錄音,去河邊找鬼府寒。 笑死魁衙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的株搔。 我是一名探鬼主播剖淀,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纤房!你這毒婦竟也來了纵隔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捌刮,沒想到半個月后碰煌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡糊啡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年拄查,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棚蓄。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡堕扶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梭依,到底是詐尸還是另有隱情稍算,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布役拴,位于F島的核電站糊探,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏河闰。R本人自食惡果不足惜科平,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望姜性。 院中可真熱鬧瞪慧,春花似錦、人聲如沸部念。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡炼。三九已至妓湘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乌询,已是汗流浹背榜贴。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妹田,地道東北人唬党。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像秆麸,于是被迫代替她去往敵國和親初嘹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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

  • 對于從事 iOS 開發(fā)人員來說沮趣,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,726評論 7 64
  • 參考鏈接: http://www.cnblogs.com/ioshe/p/5489086.html 簡介 Runt...
    樂樂的簡書閱讀 2,137評論 0 9
  • 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的轉(zhuǎn)載 這篇文章完全是基于南峰子老師博客的...
    西木閱讀 30,569評論 33 466
  • 圖片拉伸和尺寸變換 圖片拉伸 圖片的處理大概分 截圖(capture), 縮放(scale), 設(shè)定大小(res...
    Dylan_Yu閱讀 680評論 0 1
  • 方法一:自定義context 方法二:系統(tǒng)自動生成(在AppDelegate內(nèi)部)然后其他類里面進行調(diào)用: 數(shù)據(jù)保...
    Dayu大魚閱讀 570評論 0 1