iphone开发点滴-block几点(整理中)

1.对于block的访问范围,对于block内部的变量,可以随意访问,但是对于block之外的外部变量,就需要加上关键词__block

比如:

-(void)A

{

//int outsideVar = 10;//error

__block int outsideVar  = 10;

void(^B)()=^(void)

{

int insideVar = 20;

        NSLog(@"inside var = %d",insideVar);

outsideVar = 30; //error

};

    B();

}

如果不使用限定词的话,block里面只是一个只读复制,就像

比如:

- (void)scopeTest

{

    NSUInteger integerValue = 10;

    BlockWithNoParams myBlock = ^{

        NSLog(@"Integer value insdie the block = %lu",(unsigned long)integerValue);

    };

    

    integerValue = 20;

    myBlock();

    NSLog(@"Integer value outside the block = %lu",(unsigned long)integerValue);

}

输出结果:10

        20




2.对于单独的block对象,不能访问self对象,

例如:

void(^inCorrectBlockObject)(void)=^{

NSLog(@"self==%@",self);//error, self is undefine here

}

如果需要访问,可以放在obj-c方法中,

比如:

- (void)simpleMethod

{

void(^A)(void)=^(void)

{

NSLog(@"self==%@",self);//correct;

};

A();

}

3.对于类变量的访问,

比如:(一种是单独的block)

@property(nonatomic, retain) NSString*aString;

@synthsize aString;

void(^A)(void) = ^(void){

//self.aString = @"b sring";//error,不能用self.这样的形式,但是可以用set,get方法

[self setAString:@"bString"];

};

比如:(一种是在objectc方法中)

@property(nonatomic, retain) NSString*aString;

@synthsize aString;

- (void)A

{

     void(^A)(void)=^{

self.aString = @"B string";

NSLog(@"aString=%@",aString);

};

A();

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值