从iOS书本上看到的,几点关于block:
(1)对于局部变量,block内不能够对其进行赋值,只能读取值。进行赋值的话,即会报错。
(2)在定义了block之后,再次对局部变量赋值,二次赋值无效。原因:在定义block时,系统把局部变量的值保存在块中,而不是在使用块时,去调用局部变量,因此,在定义block之后,对block中需要调用的局部变量,进行赋值,无效。
(3)如果想要在执行block时,即时访问,块中的局部变量,同时可以在块中修改局部变量。则可用__block修饰该局部变量。即可达到目的。
以上三点,使用,一小段程序,进行说明,更加明显。
int s = 10;
void (^nslogS)(void) = ^(void){
s = 15;//程序报错,提示不能进行赋值,注释之后无错
NSLog(@"%d",s);
}
s = 13;
nslogS();//调用块
输出结果为:10;
__block int s = 10;
void (^nslogS)(void) = ^(void){
NSLog(@"%d",s);
s = 15;//不报错
NSLog(@"%d",s);
}
s = 13;
nslogS();//调用块
输出结果为:第一次输出13,第二次输出15.
以上都是针对局部变量,block的影响,那么全局变量呢?
网上搜索一些相关内容:该篇微博:http://blog.sina.com.cn/s/blog_b0c5954101017zfr.html,看起来很详细,但是看完没有具体的概念。
另外这篇好像更加针对iOS开发:http://blog.youkuaiyun.com/jasonblog/article/details/7756763 。
第三篇,也可供参考:http://www.cnblogs.com/tangbinblog/p/4146728.html