黑马程序员****OC语言基础****Block概念和理解

本文介绍了Objective-C中的Block概念,包括其定义、使用方式以及作为函数返回值的应用,并通过实例展示了如何利用Block来模拟程序员一天的工作流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

     Block:

                Block对象是一个C级别的语法和运行机制。 

                由于Objective-C 和 C++ 都是衍生自 C,block被设计为可同时兼容这三种语言。 

               定义格式:

                void(^block名)() = ^{代码块;} 

                使用格式:

                block(); 

                block可以分为:无参无返回值、无参有返回值、有参无返回值、有参有返回值

                当block作为返回值:


<span style="font-size:24px;">#import <Foundation/Foundation.h>

typedef void (^newType)();
newType test1 () {
    newType w1 = ^{
    NSLog(@"XXXXX");
    NSLog(@"Good");};
    return w1;
}

typedef int (^bestType2)(int a,int b);
bestType2 test2(){
    return ^(int a,int b){
        return a+b;
    };
}


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        newType n1 = test1();
        n1();
        bestType2 n2 = test2();
        int x = n2(45,76);
        NSLog(@"x = %d",x);
        
        
        
    }
    return 0;
}</span>

            运行结果:xxxxx

                               Good

                              x = 121

            block类型作为返回值,可以参考函数作为返回值进行理解


           实例分析:用block传递程序员的一天


/*
 
 起床
 刷牙
 去车站
 坐车
 了解项目
 去车站
 坐车回家
 吃饭
 睡觉
 
 */


#import <Foundation/Foundation.h>

//workBlock作为参数
void work(void (^workBlock)()){
    NSLog(@"起床");
    NSLog(@"刷牙");
    NSLog(@"去车站");
    NSLog(@"坐车");
    workBlock();     //此处是代码段插入的位置
    NSLog(@"去车站");
    NSLog(@"坐车回家");
    NSLog(@"吃饭");
    NSLog(@"睡觉");
}

typedef void (^workBlock)();
workBlock w;
void workDay(int n){
    
    switch (n) {
        case 1:
            
            w = ^{
                NSLog(@"了解项目");
            };
            break;
            
//            work(^ {
//                NSLog(@"了解项目");
//            });
//            break;
        case 2:
            w = ^ {
                NSLog(@"分析项目");
            };
            break;
            
//            work(^ {
//                NSLog(@"分析项目");
//            });
//            break;
            
        case 3:
            w = ^ {
                NSLog(@"写项目");
            };
            break;
            
//            work(^ {
//                NSLog(@"写项目");
//            });
//            break;
            
        case 4:
            w = ^ {
                NSLog(@"调试项目");
            };
            break;
            
//            work(^ {
//                NSLog(@"调试项目");
//            });
//            break;
            
        case 5:
            w = ^ {
                NSLog(@"离职");
            };
            break;
            
//            work(^ {
//                NSLog(@"离职");
//            });
//            break;
            
        default:
            break;
    }
    work(w);
    
}


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        for (int i=1; i<=5; i++) {
            workDay(i);
            NSLog(@"---------------");
            NSLog(@"---------------");
        }
    }
    return 0;
}

            运行结果:

  起床

 刷牙

 去车站

 坐车

 了解项目

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------

  起床

 刷牙

 去车站

 坐车

 分析项目

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------

 起床

 刷牙

 去车站

 坐车

 写项目

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------

 起床

 刷牙

 去车站

 坐车

 测试项目

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------


 起床

 刷牙

 去车站

 坐车

 离职

 去车站

 坐车回家

 吃饭

 睡觉

---------------

---------------

            注释内的内容是另一种写法,直接插入代码段就可以,不用每次调用work函数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值