__block的作用

  没有__block qualifier的primitive c types会直接在创建block的时候被capture到block里。有__block qualifier的话,会在调用block的时候取&number地址所指向的值,如果调用block的时候已经超过了number声明的scope,那么结果是undefined。
  没有__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: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

  有__block

__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

 

posted @ 2016-02-25 15:21  i左撇子  阅读(189)  评论(0编辑  收藏  举报