目标C - 非空块的用法是什么?

时间:2013-02-06 19:05:08

标签: objective-c block

我见过很多具有void返回类型的块。但是可以声明非空块。是什么用的?

块声明,

-(void)methodWithBock:(NSString *(^)(NSString *str))block{
     // do some work
    block(@"string for str"); // call back
}

使用方法,

[self methodWithBock:^NSString *(NSString *str) {

        NSLog(str); // prints call back
        return @"ret val"; // <- return value for block 
    }];

在上面的块声明中,NSString返回类型块的目的究竟是什么?如何使用返回值(“ret val”)?

2 个答案:

答案 0 :(得分:11)

出于与使用非void函数指针相同的原因,可以使用非void块 - 在代码执行时提供额外的间接级别。

NSArray的{​​{1}}提供了此类用法的一个示例:

sortUsingComparator

比较器块允许您将比较逻辑封装在执行排序的NSArray *sorted = [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){ NSString *lhs = [obj1 stringAttribute]; NSString *rhs = [obj2 stringAttribute]; return [lhs caseInsensitiveCompare:rhs]; }]; 方法之外。

答案 1 :(得分:4)

这只是一个回报,所以你可以做这样的事情来利用返回值并对其进行处理。

-(void)methodWithBlock:(NSString *(^)(NSString *str))block{
     // do some work

    NSString *string = block(@"string for str"); // call back

    // do something with the return string
    NSLog(@"%@",string);
}