黑马程序员—oc语言学习心得—block

 黑马程序员—oc语言学习心得—block

1,程序一般用typedef定义一个block类型 然后调用

typedef void(^xxx)();

可使用助记符 inlineblock

2,Block内部可以访问外部变量;
默认情况下,Block内部不能修改外部的局部变量

给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。

3,block的作用:

利用block封装代码,可以作为函数返回值和函数参数,

提高了代码灵活性和效率

下面是自己写的代码 实现

#import <Foundation/Foundation.h>

//void (^workBlock)() block座位函数参数传递
typedef void(^Newbolck)();

void work(int n){
    
    NSLog(@"起床。。。。");
    NSLog(@"刷牙。。。。");
    NSLog(@"洗脸。。。。");
    NSLog(@"去公司。。。。");
    //workBlock();  //此处不一样
    Newbolck workDay(int a); // 声明方法,因为方法主体在下面
    
    Newbolck w=workDay(n);//此处workDay(n)的返回值为newblock对象
    
    w();//执行代码块
    
    NSLog(@"回家。。。。");
}

typedef void(^newType)();

//返回值为block类型
newType test(){

    newType n1=^{
    
        NSLog(@"xxxxxxx");
        NSLog(@"yyyyyyyy");
    };

    return n1;
}


//带两个参数的block做做返回值
typedef int(^newType2)(int,int);
newType2 test2(){

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

}


//让他返回值为block类型
Newbolck workDay(int a){
    
    //简化
    //typedef void(^Block)(); //定义别名
    Newbolck w; //定义bolck类型变量 不用加 * 号.....
    
    switch (a) {
        case 1:
            w =^(){
            
                 NSLog(@"了解项目");
            
            };
        case 2:
            w =^(){
                
                NSLog(@"开发项目");
                
            };
        case 3:
            w =^(){
                
                NSLog(@"卖了项目");
                
            };
            break;
            
        default:
            break;
    }
    
   // work(w);
    return w;
}




int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //for (int i=1; i<=5; i++) {
            
            work(1);
            
        
       // }
        
        
        // 调用返回值为block类型方法
        
        //因为test()方法返回值是block对象 因此创建对象接受
        newType n2=test();
        n2();
        
        newType2 n3=test2();
        int result=n3(3,8);
        NSLog(@"result=%d",result);
        
        
        
        
        workDay(1);
        printf("\n");
        
        workDay(2);
        printf("\n");
        
        
        workDay(3);
        printf("\n");
        
            
        
    
        
        void (^myblock)(int,int)=^(int a,int b)
        {

        
            NSLog(@"a+b=%d",a+b);
            
        };

         myblock(2,8);
        
        
        typedef int(^Newbolck)(int,int);
        
        
        Newbolck b1=^(int x,int y)
        {
            
            return x+y;
        
        };
        
        Newbolck b2=^(int x,int y){
        
        
            return x>y? x:y;
        
        };
        
        
       
        NSLog(@"b1->%d",b1(2,5));
        NSLog(@"b2->%d",b2(5,9));
        
        
 }
        
        return 0;
        
    
    }

 

原文地址:https://www.cnblogs.com/zijie/p/4929557.html