《Objective-C高級(jí)編程》Blocks 閱讀筆記 item1(Blocks概要和模式)

《Objective-C高級(jí)編程》Blocks 閱讀筆記系列

《Objective-C高級(jí)編程》Blocks 閱讀筆記 item1(Blocks概要和模式)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item2(Block的實(shí)質(zhì))
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item3(截獲自動(dòng)變量值)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item4(__block說(shuō)明符)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item5(Block存儲(chǔ)域)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item6(__block變量存儲(chǔ)域)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item7(截獲對(duì)象)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item8(__block變量和對(duì)象)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item9(Block循環(huán)引用)
《Objective-C高級(jí)編程》Blocks 閱讀筆記 item10(copy/release實(shí)例方法)

前言

接著看Objective-C高級(jí)編程第2章 Blocks的知識(shí)點(diǎn)油够,第3節(jié)有關(guān)Blocks的實(shí)現(xiàn)實(shí)在是難啃雹有,只能慢慢啃了倒槐。

2.1 Blcoks概要

2.1.1 什么是Blocks

  • Blocks是C語(yǔ)言的擴(kuò)充功能——“帶有自動(dòng)變量(即局部變量)的匿名函數(shù)”泌霍。
  • 使用Blocks可以不聲明C++和Objective-C類鹅心,也沒(méi)有使用靜態(tài)變量、靜態(tài)全局變量或全局變量時(shí)的問(wèn)題阻荒,僅用編程C語(yǔ)言函數(shù)的源代碼量即可使用帶有自動(dòng)變量值的匿名函數(shù)金吗。

2.2 Blocks模式

2.2.1 Block語(yǔ)法(即Block常量表達(dá)式)

與一般的C語(yǔ)言函數(shù)定義相比,完整形式的Block語(yǔ)法有兩點(diǎn)不同:

  • 沒(méi)有函數(shù)名稱
  • 帶有“^”

*** Block語(yǔ)法 ***


Snip20160214_5.png

*** 省略返回值類型的Block語(yǔ)法 ***


Snip20160214_7.png

*** 省略返回值類型和參數(shù)列表的Block語(yǔ)法 ***

Snip20160214_8.png

2.2.2 Block類型變量(即Block變量)

在Block語(yǔ)法下餐济,可將Block語(yǔ)法賦值給聲明為Block類型的變量中(即源代碼中一旦使用Block語(yǔ)法就相當(dāng)于生成了可賦值給Block類型變量的“值”)耘擂。“Block”即指源代碼中的Block語(yǔ)法絮姆,也指由Block語(yǔ)法所生成的值醉冤。

  • 使用Block語(yǔ)法將Block賦值為Block類型變量。
  • 由Block類型變量向Block類型變量賦值篙悯。
  • 在函數(shù)參數(shù)中使用Block類型變量可以向函數(shù)傳遞Block蚁阳。
  • 在函數(shù)返回值中指定Block類型,可以將Block作為函數(shù)的返回值返回鸽照。
  • 在函數(shù)參數(shù)和返回值中使用Block類型變量時(shí)螺捐,可以通過(guò)typedef為Block類型提供別名,從而起到簡(jiǎn)化塊類型變量名的作用矮燎。
  • 通過(guò)Block類型變量調(diào)用Block與C語(yǔ)言通常的函數(shù)調(diào)用沒(méi)有區(qū)別(例如定血,在函數(shù)和方法中可以將Block類型變量作為參數(shù))砚哆。
  • Block類型變量可完全像通常的C語(yǔ)言變量一樣使用(例如欢际,可以使用指向Block類型變量的指針,即Block的指針類型變量)晋控。

2.2.3 截獲自動(dòng)變量值

Blocks中浅乔,Block常量表達(dá)式會(huì)截獲所使用的自動(dòng)變量的值(即保存該自動(dòng)變量的瞬間值)倔喂,從而在執(zhí)行塊時(shí)使用。

2.2.4 __block說(shuō)明符(即存儲(chǔ)類型修改符)

使用附有__block說(shuō)明符的自動(dòng)變量可在Block中賦值靖苇,該變量稱為_(kāi)_block變量席噩。

2.2.5 截獲的自動(dòng)變量

  • 如果將值賦值給Block中截獲的自動(dòng)變量,就會(huì)產(chǎn)生編譯錯(cuò)誤贤壁。這種情況下悼枢,需要給截獲的自動(dòng)變量附加__block說(shuō)明符。
  • 截獲Objective-C對(duì)象脾拆,調(diào)用變更該對(duì)象的方法并不會(huì)產(chǎn)生編譯錯(cuò)誤馒索,但是,向截獲的自動(dòng)變量(即所截獲的Objective-C對(duì)象)賦值則會(huì)產(chǎn)生錯(cuò)誤名船〈律希總之,賦值給截獲的自動(dòng)變量會(huì)產(chǎn)生編譯錯(cuò)誤渠驼,但使用截獲的值卻不會(huì)有任何問(wèn)題蜈块。
  • 在現(xiàn)在的Block中,截獲自動(dòng)變量的方法并沒(méi)有實(shí)現(xiàn)對(duì)C語(yǔ)言數(shù)組的截獲,但是百揭,使用指針可以解決該問(wèn)題爽哎。
    *** 通過(guò)指針實(shí)現(xiàn)對(duì)C語(yǔ)言數(shù)組自動(dòng)變量的截獲 ***
const char *text = "hello";
void (^blk)(void) = ^{
  printf("%c\n", text[2]);
};
blk();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市器一,隨后出現(xiàn)的幾起案子课锌,更是在濱河造成了極大的恐慌,老刑警劉巖祈秕,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渺贤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡请毛,警方通過(guò)查閱死者的電腦和手機(jī)癣亚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)获印,“玉大人,你說(shuō)我怎么就攤上這事街州〖娣幔” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵唆缴,是天一觀的道長(zhǎng)鳍征。 經(jīng)常有香客問(wèn)我,道長(zhǎng)面徽,這世上最難降的妖魔是什么艳丛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮趟紊,結(jié)果婚禮上氮双,老公的妹妹穿的比我還像新娘。我一直安慰自己霎匈,他們只是感情好戴差,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布铛嘱。 她就那樣靜靜地躺著暖释,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墨吓。 梳的紋絲不亂的頭發(fā)上球匕,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音帖烘,去河邊找鬼亮曹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乾忱。 我是一名探鬼主播讥珍,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窄瘟!你這毒婦竟也來(lái)了衷佃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蹄葱,失蹤者是張志新(化名)和其女友劉穎氏义,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體图云,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惯悠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竣况。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片克婶。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丹泉,靈堂內(nèi)的尸體忽然破棺而出情萤,到底是詐尸還是另有隱情,我是刑警寧澤摹恨,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布筋岛,位于F島的核電站,受9級(jí)特大地震影響晒哄,放射性物質(zhì)發(fā)生泄漏睁宰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一寝凌、第九天 我趴在偏房一處隱蔽的房頂上張望柒傻。 院中可真熱鬧,春花似錦硫兰、人聲如沸诅愚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)违孝。三九已至,卻和暖如春泳赋,著一層夾襖步出監(jiān)牢的瞬間雌桑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工祖今, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留校坑,地道東北人拣技。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像耍目,于是被迫代替她去往敵國(guó)和親膏斤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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