zoukankan      html  css  js  c++  java
  • ios block

    一种新的数据类型,用于定义变量
    Block类型的变量中存储的数据是一段程序代码

    1. 语法
    void/*返回值类型*/(^myBlock/*名字*/)(void/*形参*/) = ^void(void)/*与前面一一对应*/{
        NSLog(@"Block被执行了")
    double (^myBlock1)(int,int/*可以直接只写数据类型*/) = ^double(int a,int b/*需要写上形参名*/){
        return a+b;
    }
    };
    
    (左右相等)
    typedef void(^BlockType)(void);//定义了一个Block的数据类型
    typedef double(^myBlock2)(int,int);
    
    2. Block与全局变量
    //Block与全局变量
            myBlock2 b3 = ^double(int a,int b){
                a *= g_i;//全局变量可以被访问
                g_i = 20;//全局变量可以被赋值
                return a+b;
            };
            NSLog(@"%lg",b3(2,3));
            NSLog(@"%d",g_i);
    
    3. Block与局部变量
     //Block与局部变量
            int i2 = 30;
            __block int i3 = 50;
            BlockType b4 = ^void(void){
                NSLog(@"%d",i2);//局部变量可以在Block中被访问
    //            i2= 40;//局部变量不能在Block中被赋值
                i3 = 60;//加上关键字__block后,局部变量可以在Block中被赋值
            };
            b4();
            NSLog(@"%d",i3);
    
    4.Block在自定义类中的使用
    //Block在自定义类中的使用
            TRMyClass *myC = [[TRMyClass alloc]init];
            [myC method];
            
            [myC method:^void(void){
                NSLog(@"无话可说");
            }];
            
            [myC method:^void(void){
                NSLog(@"有话说");
            }];
            
            [myC method2:^double(int a,int b){
                return a+b;
            }];
            [myC method2:^double(int a,int b){
                return a*b;
            }];
            
            [myC method3:^double(int a,int b){//既传算法又传数据的Block
                return a+b;
            }withX:10 andY:20];
            [myC getBlock]();
            
            myC.b = ^void(void){
                NSLog(@"Block做类的属性");
            };
    
            myC.b();
    
    5. Block与数组
     //Block与数组的关系
            NSNumber *a1 = [NSNumber numberWithInt:10];
            NSNumber *a2 = [NSNumber numberWithInt:8];
            NSNumber *a3 = [NSNumber numberWithInt:20];
            NSNumber *a4 = [NSNumber numberWithInt:2];
            NSNumber *a5 = [NSNumber numberWithInt:15];
            
            NSArray *num = @[a1,a2,a3,a4,a5];
            NSArray *sorted = [num sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
                return [obj1 compare:obj2];//从小到大排序
            }];
            NSLog(@"%@",sorted);
            
            NSArray *str = @[@"one",@"two",@"three"];
            sorted = [str sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
                return [obj1 compare:obj2];//按字母的大小顺序排序
            }];
            NSLog(@"%@",sorted);
    
    6. Block与字典
       //Block与字典
            NSDictionary *dic1 = @{@"1":a1,@"2":a2,@"3":a3,@"4":a4,@"5":a5};
            sorted = [dic1 keysSortedByValueUsingComparator:^NSComparisonResult(id obj1 ,id obj2){
                return [obj1 compare:obj2];//从小到大排序
            }];
            for (NSString *key in sorted){
                NSLog(@"%@ = %@",key,dic1[key]);
            }
            NSLog(@"---------------");
            NSDictionary *dic2 = @{@"1":@"one",@"2":@"two",@"3":@"three",@"4":@"four",@"5":@"five"};
            sorted = [dic2 keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) {
                return [obj1 compare:obj2];//按字母的大小顺序排序
            }];
            for (NSString *key in sorted){
                NSLog(@"%@ = %@",key,dic2[key]);
            }
    
    7、Block 和 函数指针 的本质区别
      fun();
         //Block 和 函数指针 的本质区别
         myBlock();//所指向的代码是没有名字的
    //        void (*pf)() = fun;//函数指针,但是指向的代码要有名字
    //        pf();
         NSLog(@"%lg",myBlock1(2,3));
    
    成功的三大原则: 1、坚持 2、不要脸 3、坚持不要脸
  • 相关阅读:
    『ORACLE』 配置共享服务器(11g)
    『ORACLE』 对临时表空间相关操作(11g)
    『ORACLE』 清理监听日志(11g)
    『ORACLE』 表空间属性(11g)
    『ORACLE』 约束实验(11g)
    『ORACLE』 内置约束(11g)
    『ORACLE』 SQL语句简单应用(五)(11g)
    『ORACLE』 SQL语句简单应用(四)(11g)
    『ORACLE』 SQL语句简单应用(三)(11g)
    Unity 导出的android项目自动生成Private Libraries
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7420104.html
Copyright © 2011-2022 走看看