Block筆記 2 Block變數

2021-07-03 05:14:34 字數 1683 閱讀 9705

c語言中可以使用函式指標來指向乙個函式,通過函式指標來間接的呼叫乙個函式。c函式指標形式如下:

c 1

2

3

4

5

6

7

8

9

10

11

///

定義乙個函式

intfun

(intt)

///宣告乙個函式指標,並指向定義的fun函式

int(

*funcptr)(

int)=&

fun;

///呼叫,通過函式指標來間接的呼叫fun函式

nslog(@

"number = %d",(

*funcptr)(

10));

block型別的變數和c中的函式指標宣告很類似,只是將*替換成了^,照葫蘆畫瓢宣告乙個block變數:

objective-c

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

//////宣告乙個block 變數,變數名為blk

int(

^blk)(

int);

///為變數賦值,右邊為block的實現主體

blk=

^int

(intt)

; ///宣告和賦值寫在一起,實現部分省略了返回型別,

///會根據return來判斷,與左側的返回型別 int 必須一致

int(

^blkk)(

int)=^

(intt)

; ///像函式一樣呼叫block變數

nslog

(@"number = %d,%d"

,blk(10

),blkk(5

));

///block 變數作為函式引數

void

func

(int(^

blk)

(int))

利用typedef 為block變數重新命名

typedef

int(

^blk_t)(

int);

void

funcc

(blk_t

blk)

/

Block 學習筆記

一 什麼是block?a block is an anonymous inline collectionof code,and sometimes also called a closure 閉包是一種函式,它能夠讀取其它函式的內部變數。block 也相當於內聯函式,執行速度快,簡單方便 二 為什麼...

block變數儲存域

將block賦值給strong 型別的block變數,或者賦值給strong 修飾的物件型別中的block成員變數時,block會從棧複製到堆上。那 block變數會有什麼變化呢?其實,當block 被從棧複製到堆上時,block中使用到的變數也會從棧賦值到堆上。當block被從棧複製到堆前後,bl...

Block 5 Block解析之截獲區域性變數值

源 int main int argc,const char argv val 2 fmt these values were changed.val d n blk return 0 將上面的源 用命令 clang rewrite objc main.c 轉換為c 如下 struct main b...