沒有__block qualifier的primitive c types會直接在建立block的時候被capture到block裏。有__block qualifier的話,會在調用block的時候取&number地址所指向的值,若是調用block的時候已經超過了number聲明的scope,那麼結果是undefined。
沒有__blockspa
int number = 10; int(^add)(int) = ^(int b) { NSLog(@"===%d", number); return number + b; }; number = 5; NSLog(@"---%d", number); NSLog(@"%d", add(5)); 輸出結果: 2016-02-25 15:17:58.423 CommandTest[16703:3579952] ---5 2016-02-25 15:17:58.424 CommandTest[16703:3579952] ===10 2016-02-25 15:17:58.424 CommandTest[16703:3579952] 15
有__blockcode
__block int number = 10; int(^add)(int) = ^(int b) { NSLog(@"===%d", number); return number + b; }; number = 5; NSLog(@"---%d", number); NSLog(@"%d", add(5)); 輸出結果: 2016-02-25 15:19:50.641 CommandTest[16729:3581909] ---5 2016-02-25 15:19:50.642 CommandTest[16729:3581909] ===5 2016-02-25 15:19:50.642 CommandTest[16729:3581909] 10