objective-c - Objective C - 非空 block 的用途是什么?

标签 objective-c block

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

block 声明,

-(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 
    }];

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

最佳答案

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

NSArraysortUsingComparator 提供了这样一种用法的示例:

NSArray *sorted = [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){
    NSString *lhs = [obj1 stringAttribute];
    NSString *rhs = [obj2 stringAttribute];
    return [lhs caseInsensitiveCompare:rhs];
}];

比较器 block 让您可以将比较逻辑封装在执行排序的sortedArrayUsingComparator方法之外。

关于objective-c - Objective C - 非空 block 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736763/

相关文章:

iphone - 如何重复 ASIHTTPRequest?

ios - iOS 8后台获取从未在设备上多次调用

ios - 将 Objective-C 框架连接到 Swift iOS 8 应用程序(解析框架)

CSS 菜单 : dropdown items display as block

jquery:速记 - 对多个 id 不显示任何内容

ios - 无法将 Swift 和 Obj-C 库与 Cocoapods 一起使用

iphone - 从 modalViewController 中调用父类中的方法

.net - DataAnnotations 或应用程序验证 block

python - 使用没有 "with" block 的上下文管理器

Ruby yield 示例解释?