您的位置:首页 > 其它

block(八)作用域

2017-12-25 11:16 260 查看
//闭包

NSString* s =@"123";

void (^block)() = ^() {

NSLog(@"%@",s);

};

block();// 1

s =@"abc";

block();// 2

结果:

123

123

//__block破坏了闭包,扩大了变量在块结构中的局部作用域为全局的

__blockNSString* s = @"123";

void (^block)() = ^() {

NSLog(@"%@",s);

};

block();//3

s =@"abc";

block();//4

结果:

123

abc

首先,没有__block标识的变量,其状态会在块结构创建的时候,已经保存在了块里了.形成了独立的结构,内部变量外部都无法访问(闭包).利用c语言的解释 1可以理解为block1函数

void block1(){

NSString* s = @"123";

NSLog(@"%@",s);

}

而例2中__block标示的变量,会将变量的作用域变大.s相当于变成全局的作用域.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: