先上兩段代碼:
//1
int val = 0;
void (^blk)(void) = ^{val = 1};
//2
id array = [[NSMutableArray alloc] init];
void (^blk)(void) = ^{
id obj = [[NSObject alloc] init];
[array addobject:obj];
};
稍微用過block的同學都知道,第一個程序編譯時會出錯,因爲該程序向截獲的代碼賦值了(如果要負值,就需要加上_block,變爲_block變量),而第二段代碼就不會報錯,如果用C語言來描述的話,那就是截獲NSMutableArray類對象用的結構體實例指針,雖然不能賦值,但是使用是沒有問題的