Block用法(訪問變數)(一)

2021-07-04 11:31:48 字數 1919 閱讀 5260

訪問變數

1、可以讀取和block pointer同乙個scope的變數值:

[cpp]view plain

copy

;  //block裡面可以讀取同一型別的outa的值

intresult = myptr(3);  

// result is 11

nslog(@"result=%d"

, result);  

}  

下面來看一段很有意思的**:

[cpp]view plain

copy

; //block裡面可以讀取同一型別的outa的值

outa = 5;  //在呼叫myptr之前改變outa的值

intresult = myptr(3);  

// result的值仍然是11,並不是8

nslog(@"result=%d"

, result);  

}  

為什麼result 的值仍然是11?而不是8呢?事實上,myptr在其主體中用到的outa這個變數值的時候做了乙個copy

的動作,把outa的值copy下來。所以,之後outa即使換成了新的值,對於myptr裡面copy的值是沒有影響的。

需要注意的是,這裡copy的值是變數的值,如果它是乙個記憶體的位置(位址),換句話說,就是這個變數是個指標的話,

它的值是可以在block裡被改變的。如下例子:

[cpp]view plain

copy

(5);  

nslog(@"test array :%@"

, mutablearray);  

}  

原本mutablearray的值是,在block裡面被更改mutablearray後,就變成了。

2、直接訪問static型別的變數

[cpp]view plain

copy

;  outa = 5;  

intresult = myptr(3);  

//result的值是8,因為outa是static型別的變數

nslog(@"result=%d"

, result);  

}  

甚至可以直接在block裡面修改outa的值,例如下面的寫法:

[cpp]view plain

copy

;  int

result = myptr(3);  

//result的值是8,因為outa是static型別的變數

nslog(@"result=%d"

, result);  

}  

3、block variable型別的變數

在某個變數前面如果加上修飾字「_

_block」的話(注意,block前面有兩個下劃線),這個變數就稱作block variable。

那麼在block裡面就可以任意修改此變數的值,如下**:

[cpp]view plain

copy

;  int

(^myptr2)(

int) = ^(

inta);  

intresult = myptr(0);   

//result的值為5,num的值為6

result = myptr2(0);      //result的值為6,num的值為7

nslog(@"result=%d"

, result);    

}  

因為myptr和myptr2都有用到num這個block variable,最終num的值為7.

未完待續。。

Block筆記 2 Block變數

c語言中可以使用函式指標來指向乙個函式,通過函式指標來間接的呼叫乙個函式。c函式指標形式如下 c 1 2 3 4 5 6 7 8 9 10 11 定義乙個函式 intfun intt 宣告乙個函式指標,並指向定義的fun函式 int funcptr int fun 呼叫,通過函式指標來間接的呼叫fu...

block用法小計

預設情況下,任何block都是在棧中,隨時可能會被 對block設定copy屬性,block的記憶體就會放到堆裡面。book b book alloc init b.block 如果像上述寫法block所指向的 塊會強引用book的記憶體位址,使得book物件不能釋放,造成記憶體洩露。book b ...

block 基本用法

專門處理 需要重複呼叫的 block 返回值相同,引數相同 在.h檔案中,宣告 typedef void typedefblock nsstring typedef int typedefbock2 inta,intb ibaction testaction id sender oc語言 self ...