zoukankan      html  css  js  c++  java
  • 黑马程序员—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;
            
        
        }

     

  • 相关阅读:
    搭建高可用mongodb集群—— 副本集
    搭建高可用mongodb集群(一)——mongodb配置主从模式
    单线程异步回调机制的缺陷与node的解决方案
    js实现接口的几种方式
    访问者模式和php实现
    策略模式和php实现
    状态模式和php实现
    观察者模式和php实现
    C语言之一般树
    电子相册之bitmap
  • 原文地址:https://www.cnblogs.com/zijie/p/4929557.html
Copyright © 2011-2022 走看看