iOS 中block中使用了外部變數的分析

2022-08-30 03:48:07 字數 721 閱讀 5395

例子1:

int val = 10

;

void (^blk)(void) = ^();

val = 2

; printf(

"out block %d[%p]\n

", val, &val);

//out block 2[0x7fff5fbff82c]

blk();

例子2:

__block int val = 10

;

void (^blk)(void) = ^();

val = 2

; printf(

"out block %d[%p]\n

", val, &val);

//out block 2[0x7fff5fbff82c]

blk();

結論:1. block中,如果使用了外部引數,那麼這些引數都會被拷貝乙份到block中,無論外部的這個變數如何變化,block中的引數不會變化

2. 如果需要在block中使用外部引數,那麼就請使用__block關鍵字

3. block可能global,heap,stack中儲存,一般如果在類中定義乙個block,那麼它是在global中,使用copy或者strong都可以。但是為了安全起見,建議block都使用copy放置block被分配在stack中。

IOS中Block的使用

block的宣告 1,void myblock 2,int myblock float,int 3,nsstring myblock int,nsstring 也可以使用typedef為block定義別名。三種block的特性 block是乙個object物件,所以我們需要對它進行記憶體管理。blo...

iOS開發中block的使用

block簡介 block的實際行為和function很像,最大的差別是在可以訪問同乙個scope的變數值。block實體形式如下 傳入引數列 block實體開頭是 接著是由小括號所包起來的引數列 比如 int a,int b,int c 行為主體由大括號包起來,專有名字叫做block litera...

iOS中block的定義和使用

1.block可以用來儲存一段 或者用來封裝一段 段,塊。2.block的標誌是 3.block跟函式很像 可以儲存 可以有返回 值 也可以有行參 呼叫方式一樣 4.定義乙個block pragma mark 不帶引數的block void outputblock outputblock 5.帶行參...