Objective-C Blocks - 用作对象

时间:2011-01-13 15:13:49

标签: objective-c cocoa-touch objective-c-blocks

参考下面的代码,一旦一个块被放入一个数组,你怎么能拿走那个块对象并运行块中的实际代码。

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

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

-(void)programStart
{       

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

    id pointerToBlock = [array lastObject];
}

1 个答案:

答案 0 :(得分:7)

这样称呼:

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

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

  

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

我认为self指的是调用类。