block(八)作用域

//闭包

    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相当于变成全局的作用域.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值