如何在 block 中修改外部變數

2021-06-26 15:20:37 字數 557 閱讀 1909

lock 的目的是為了支援並行程式設計,對於普通的 local 變數,我們就不能在 block 裡面隨意修改(原因很簡單,block 可以被多個執行緒並行執行,會有問題的),而且如果你在 block 中修改普通的 local 變數,編譯器也會報錯。那麼該如何修改外部變數呢?有兩種辦法,第一種是可以修改 static 全域性變數;第二種是可以修改用新關鍵字 __block 修飾的變數。請看:

nsautoreleasepool * pool = [[nsautoreleasepool alloc] init];

__block int blocklocal  = 100;

static int staticlocal  = 100;

void (^ablock)(void) = ^(void);

ablock();

nslog(@"after modified, global: %d, block local: %d, static local: %d\n", global, blocklocal, staticlocal);

[pool release];

執行之後,值均為:101

block 對外部引用變數的處理

mrc 環境 一 靜態變數 和 全域性變數 在加和不加 block 都會直接引用變數位址。也就意味著 可以修改變數的值。在沒有加 block 引數的情況下。二,常量變數 nsstring a hello a 為常量變數,hello 為常量。不加 block型別 block 會引用常量的位址 淺拷貝 ...

如何 在 SharePoint 中建立外部列表

在建立外部內容型別後建立外部列表是一項非常簡單的任務,有如下4種方式進行 1 可使用 microsoft sharepoint designer 2010 啟動 microsoft sharepoint designer,然後開啟包含外部內容型別的 sdk 示例 sharepoint 單擊左導航欄上...

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

例子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 b...