__block用法初探

2016-05-19  本文已影响47人  CombatReadiness

__block在block外面

__block int a = 5;
NSLog(@"第一次打印%d",a);
[UIView animateWithDuration:0.1 animations:^{
    NSLog(@"第二次打印%d",a);
    a = 10;
    NSLog(@"第三次打印%d",a);
}];
NSLog(@"第四次打印%d",a);
a = 15;
NSLog(@"第五次打印%d",a);

//打印结果:
//2016-05-19 15:03:27.196 blockTest[6265:159275] 第一次打印5
//2016-05-19 15:03:27.197 blockTest[6265:159275] 第二次打印5
//2016-05-19 15:03:27.197 blockTest[6265:159275] 第三次打印10
//2016-05-19 15:03:27.197 blockTest[6265:159275] 第四次打印10
//2016-05-19 15:03:27.197 blockTest[6265:159275] 第五次打印15

从打印结果可以看出__block加在block的外面时,能改变block内部的变量的值(外部声明过的),且在block内部改变过的变量值,能够赋给block外部变量。

__block在block里面

int a = 5;
NSLog(@"第一次打印%d",a);
[UIView animateWithDuration:0.1 animations:^{
    NSLog(@"第二次打印%d",a);
    __block int a = 10;
    NSLog(@"第三次打印%d",a);
}];
NSLog(@"第四次打印%d",a);
a = 15;
NSLog(@"第五次打印%d",a);

//打印结果
//2016-05-19 15:15:17.716 blockTest[6297:163792] 第一次打印5
//2016-05-19 15:15:17.716 blockTest[6297:163792] 第二次打印5
//2016-05-19 15:15:17.716 blockTest[6297:163792] 第三次打印10
//2016-05-19 15:15:17.716 blockTest[6297:163792] 第四次打印5
//2016-05-19 15:15:17.717 blockTest[6297:163792] 第五次打印15

从打印结果可以看出__block加在block里面时,虽然能够改变block内部变量的值,但是不能再赋给block外部变量,也就意味着block内部修改过的变量值只能在内部用,在外部用时,值依然是没进block时的值,这个具体情况具体分析,自己看着办。

__block在block外面和在block里面总结

可以看作只要加了__block就能在block内部修改外部变量的值,且最后变量的值以第一次出现它的地方为准,中途有变动值就变为中途赋的值。

上一篇 下一篇

猜你喜欢

热点阅读