为什么接口中允许使用“__block”关键字?

时间:2012-10-16 14:01:53

标签: objective-c

如果我尝试使用__block存储类型访问“对象变量”:

@interface {
__block float x;
}

在一个区块中:

@implementation ... {
...
-(void) func: {
   ^(...) {
      x = 0;
   }
} 

我收到一个“保留周期”警告,除非我创建了一个__block对self的引用并使用它:

-(void) func: {
   __block id s = self;
   ^(...) {
      s->x = 0;
   }
} 

为什么可以在接口中声明变量“__block”?

1 个答案:

答案 0 :(得分:0)

__块变量存在于存储中,该存储在变量的词法范围与在变量的词法范围内声明或创建的所有块和块副本之间共享。 see