4

参考下面的代码,一旦将一个块放入数组中,您如何获取该块对象并运行该块中的实际代码。

另一个问题:如果我在下面的块中调用一个方法,该块是封装该方法中的代码还是捕获该方法的签名并以这种方式调用它?

-(void)blockCalledMethod
{
    NSLog(@"Hello World");
}

-(void)programStart
{       

    NSArray * array = [[NSArray alloc] initWithObjects:[[^ { [self blockCalledMethod];} copy] autorelease],nil];    

    id pointerToBlock = [array lastObject];
}
4

1 回答 1

7

像这样称呼它:

void (^pointerToBlock)(void) = [array lastObject];
pointerToBlock(); // because ^ {} is void(^)(void)

如果要直接调用它,则不能声明pointerToBlock为 an ,因为编译器必须将其识别id块类型而不仅仅是对象。

如果我在上面的块中调用一个方法,该块是封装该方法中的代码还是捕获该方法的签名并以这种方式调用它?

我应该认为self是指调用类。

于 2011-01-13T15:15:55.283 回答