通俗易懂地讲解 __block 变量

 __block 变量

一般来说,在block内只能读取在同一个作用域的变数而且没有办法修改在block外定义的任何变量,此时若我们想要这些变数能够在block中被修改,就必须在前面挂上__block的修饰词,以上面第一个例子中的 multiplier 来说,这个变数在 block 中是唯读的,所以 multiplier = 7 指定完后,在 block 中的 multiplier 就只能是 7 不能修改,若我们在 block 中修改 multiplier ,在编辑时就会产生错误,因此若想要在 block 中修改 multiplier ,就必须在 multiplier 前面加上 __block 的修饰词,请参考下面的范例:

   1: __block int multiplier = 7 ;
   2: int (^myBlock)( int ) = ^( int num)
   3:                         {
   4:                             if (num > 5 )
   5:                             {
   6:                                   multiplier = 7 ;
   7:                             }
   8:                             else
   9:                             {
  10:                                   multiplier = 10 ;
  11:                             }
  12:                             return num * multiplier;
  13:                         };

转:http://www.cnblogs.com/jy578154186/archive/2012/09/30/2709130.html

原文地址:https://www.cnblogs.com/ygm900/p/3607520.html