block代碼塊
代碼塊對象簡稱為”代碼塊”,是對 C語言中函數的擴展.運行在 iOS4.0和 OS X 10.6版本以上
代碼塊實際上是由 C語言實現的,所以在各種以 C 作為基礎的語言內都是有效地,其中包括: Objective-C,C++以及 Objective-C++.
代碼塊不屬于 ANSI 的 C語言標準,但是關于代碼塊的提議已經提交給了美國標準委員會審議.
代碼塊本質上是和其他變量相似.不同的是,代碼塊儲存的數據是一個函數體.使用代碼塊時,可以像調用其他標準函數一樣,傳入參數,并且得到返回值.
因為其定義、調用用法與函數指針基本相似,所以先復習下函數指針的用法
函數指針的語法格式
其中,按照左右法則,先看括號中的未標示的字符, pMyFunction, 其前面有一個*,說明其實一個指針,再往右看是一個括號,則說明其是一個函數指針,名字是 pMyFunction, 后面的參數為空,前面的返回值亦為空.
接下來在 X-Code 中寫一個例子來幫助大家理解
代碼塊的語法格式
與函數指針類似,主要區別就是*換成了^,而且 block塊中還有代碼片段,掉用方式基本同函數指針相似.
舉一個簡單的例子
結果是打印出 I am a block
與函數指針對比一下, 其調用方法都幾乎是一樣的,改變的是*號變成了^,也就是脫字號,其返回值還可以省略,只不過代碼塊中的是一段代碼而已,可以是一個函數.
再來一個例子,輸入幾個人的名字,實現名字的排序功能,其主代碼如下
其結果是:unsorted array info:(
ZhangSan,
LiSi,
WangWu,
ZhaoLiu,
MaQi
)
2015-06-27 22:03:52.107 BlocksDemo[2990:1834086] sorted students info:(
LiSi,
MaQi,
WangWu,
ZhangSan,
ZhaoLiu
)
代碼塊的變量
關于代碼塊局部變量
關于代碼塊的全局變量
代碼一開頭就是用了 typedef, 聲明了一個block塊的類型,類型的名稱是:blockType**
以后如果想聲明一個block對象用于返回類型是整型,有一個整型參數的block塊的時候, 可以使用blockType類型來聲明
關于修改代碼塊外部變量
如果想修改代碼塊外部的局部變量, 需要在聲明這個變量的時候, 用__block來修飾
用__ block修飾的代碼塊的局部變量是可以修改的,對于 block 來說, result 是一個外部變量,原先的值是100,用__block修飾后,在塊的代碼中修改 result 的值為20 ,輸出的結果: after modify the int result with __block int result:400
下圖為今年部分iOS開發的視頻教程,因為不定時更新中故不做多的截圖,如果有iOS開發上的問題不懂或者需要視頻教程可以看我的個人簡介。
不定時更新中。