有人可以向我解释为什么我看到的某些代码在函数中嵌入了函数吗?

时间:2011-11-10 04:41:46

标签: objective-c ios objective-c-blocks

例如,我会看到以下内容:

- (void) updateNotesView:(BOOL)visible animated:(BOOL)animated{

    void (^animations)(void) = ^{
        if (visible)
        {
            //do something
        }
        else
        {
            //do something
        }
     };


    void (^completion)(BOOL) = ^(BOOL finished){
        self.showingNotesView = visible;

        if (!visible)
        {
            //do something
        }
    };

}

我没有得到以下代码:

void (^animations)(void) 

void (^completion)(BOOL) = ^(BOOL finished)

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

这是你如何定义一个变量,它将是一个块,或者在某些其他情况下定义函数指针,如c。

int (*pt2Function)(float, char, char) = NULL;   

if (pt2Function)
    pt2Function(5.0f, 'a', 'b');


 NSArray* array = [NSArray arrayWithObjects:@"a",@"b", nil];



void(^enumerateBlock)(id,NSUInteger,BOOL*) = ^(id obj, NSUInteger idx, BOOL *stop) {
    // some code
};

[array enumerateObjectsUsingBlock:enumerateBlock];

// OR

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
   // inline block 
}];

// using a typedef for code neatness

typedef void(^typedefBlockVar)(id,NSUInteger,BOOL*);

typedefBlockVar myEnumrateBlock = ^(id obj, NSUInteger idx, BOOL *stop) {
    // some code
};

[array enumerateObjectsUsingBlock:myEnumrateBlock];