Block(一)

Block专题

Block对象是一段代码如:

        ^{
            NSLog(@"这里是一个Block");
        };

在一个花括号内有一套指令。但是没有函数名,只有一个表示这段代码是一个Block对象

        ^(double dividend,double divisor){
            double q = dividend/divisor;
            return q;
        };

这个Block对象有两个实参,一个返回值。

Block对象可以被当成一个实参来传递给可以接收Block的方法,很多苹果的类都有可以接受Block为实参的方法。


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSArray *originalString = @[@"SaueKraut",@"Raygun",@"Big Nerd Ranch",@"Mississippi"];
        NSLog(@"original string: %@",originalString);
        NSMutableArray *devowelizedString = [NSMutableArray array];
        NSArray *vowels = @[@"a",@"e",@"i",@"o",@"u"];
        void (^devowelizer)(id,NSUInteger,BOOL *);
        devowelizer = ^(id string,NSUInteger i,BOOL *stop){
            NSMutableString *newString = [NSMutableString stringWithString:string];
            for(NSString *s in vowels){
                NSRange fullRange = NSMakeRange(0, [newString length]);
                [newString replaceOccurrencesOfString:s
                                           withString:@""
                                              options:NSCaseInsensitiveSearch
                                                range:fullRange];
            }
            [devowelizedString addObject:newString];
        };
        [originalString enumerateObjectsUsingBlock:devowelizer];
        NSLog(@"这里%@", devowelizedString);
    }
    return 0;
}

enumerateObjectsUsingBlock:方法要求传入的Block对象的三个实参类型都是固定的。第一个实参是对象指针,指向当前(枚举)的对象。该指针的类型是id,所以无论数组包含的是什么类型的对象,都可以将地址赋给指针。第二个实参的类型是NSUInteger,其值是当前对象在数组中的索引。第三个实参是指向BOOL变量的指针,该变量的默认值是NO。如果将该值设为YES,那么数组对象会在执行完当前的Block对象后终止枚举过程

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,030评论 8 265
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 14,052评论 6 13
  • ==============版本管理员操作========================第一步: 创建数据仓库g...
    咪_阅读 1,868评论 0 0
  • 你有信念吗?你知道什么叫信念吗?多少人有信念呢?具体我不知道,但我只知道每个自我规律的人。应该都有,且这是必备的品...
    妖精的小尾巴阅读 2,910评论 3 4
  • 1 只要一打开手机,很难做到瞄下一眼便放下。- 常常搜一些资料,搜着搜着就偏题,一个网页里总有惹人在意的标题以及图...
    郭栩鹏阅读 2,555评论 0 1

友情链接更多精彩内容