block 基本用法

来源:互联网 发布:数据字典设计文档模板 编辑:程序博客网 时间:2024/05/29 07:43
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'PingFang SC'; color: #4bd156}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ffffff}span.s1 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #de38a5}span.s4 {font-variant-ligatures: no-common-ligatures; color: #00b1ff}

//专门处理: 需要重复调用的block(返回值相同,参数相同)

在.h文件中,声明

typedef void(^TypedefBlock)(NSString *);

typedef int(^TypedefBock2)(int a, int b);

- (IBAction)TestAction:(id)sender {    //调用 无返回值 无参数的block    VoidBlock();        //调用 带返回值 带参数的block    int a = 2, b = 3;    NSLog(@"调用block函数,计算 %d * %d = %d",a, b, blockTest1(a, b));        //调用 typedef 声明的block    blockTypedef(@"我点击了button");        [self UseBlockWithOC:^(NSString *info) {        NSLog(@"%@", info);    }];        //oc语言    [self UserBlockWithOC2:^int(int a, int b) {        return a + b;    }];        [self UserBlockWithOC3:^int(int a, int b) {        return a + b;    }];    [self UserBlockWithOC3:blockTypedef2];        //c语言    UseBlockWithC(^(NSString *info) {        NSLog(@"%@", info);    });    UseBlockWithC2(^int(int a, int b) {        return a + b;    });    UseBlockWithC3(blockTypedef2);}


/****************** block作为 C 参数 *********************/void UseBlockWithC(void(^cBlock)(NSString *info)){    cBlock(@"我是通过 c语言block作为局部参数调用的");}void UseBlockWithC2(int(^cBlock)(int a, int b)){    NSLog(@"c_result: %d", cBlock(200, 300));}void UseBlockWithC3(TypedefBock2 cBlock){    NSLog(@"c_result: %d", cBlock(200, 300));}/****************** block作为 OC 参数 *********************/- (void)UseBlockWithOC:(void (^)(NSString *info)) ocBlock{    ocBlock(@"我是通过 oc语言block作为局部参数调用的");}- (void)UserBlockWithOC2: (int (^)(int a, int b)) ocBlock{    NSLog(@"oc_result: %d", ocBlock(100, 200));}- (void)UserBlockWithOC3: (TypedefBock2) myBlock{    NSLog(@"typdefBlock作为局部参数: %d", myBlock(100,100));}/******************** block处理 **********************///.声明并赋值定义一个Block变量int(^blockTest1)(int, int) = ^(int a, int b){    return a * b;};//typedef :声明并赋值定义一个Block变量TypedefBlock blockTypedef = ^(NSString *info){    NSLog(@"来自typedefBlock调用: %@",info);};TypedefBock2 blockTypedef2 = ^(int a, int b){    return a + b;};