• OC中新增的数据类型


    Block

       OC的Block跟C语言的指向函数指针含义相同,只不过使用Block可以更简洁、快速的定义一个指向函数指针。

       语法:

     返回值类型 (^变量名)(参数列表) = ^{//函数体...}

    C语言的函数指针

    void method()
    {
        NSLog(@"C语言的函数");
    }
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            void (*myMethod)() = method;//C语言的函数指针以*号作为标识
            myMethod();//调用
        }
        return 0;
    }

    OC的无参数Block:

    //定义一个block数据类型的变量,名字为myBlock。
    void (^myBlock)();
        //为变量赋值
    myBlock = ^{
       NSLog(@"myBlock代码块。。");
    }; //调用 myBlock();

     声明并初始化

    void (^myBlock)() = ^(){//括号可以省略 
         NSLog(@"定义了一个block并初始化");
    };//数据类型 = 值;
    myBlock();//调用

    OC的有参数Block:

    int (^sumBlock)(int,int) = ^(int a,int b)
    {
         return a+b;
    };
    int sum = sumBlock(10,25);//调用
    NSLog(@"sum = %d",sum);
    

    在Block内部修改外部的变量值,需要在变量声明时使用__block修饰。

    __block int a = 20;
        void (^myBlock)() = ^{
            a = 30;
        };
        myBlock();
        NSLog(@"a = %d",a);
    

    使用typedef定义block

    typedef int(^MyBlock)(int,int); //利用typedef定义block类型。
    #import <Foundation/Foundation.h>
    int main(int argc, const char * argv[])
    {
        //创建block类型的变量
        MyBlock add = ^(int a,int b){
            return a + b;
        };
        int sum = add(10,20);
        NSLog(@"sum = %d",sum);
        return 0;
    }
    
  • 相关阅读:
    数据库三大范式
    sql 外键 on update cascade 和 on delete cascade 作用区别?
    Mybatis入门简版(二)
    Mybatis入门简版(一)
    Mybatis入门简版(补充)
    SQL中ON和WHERE的区别
    MySQL基础(五)常见运算符
    MySQL基础(四)常用函数
    MySQL基础(三)多表查询(各种join连接详解)
    MySQL基础(二)
  • 原文地址:https://www.cnblogs.com/congliang/p/3683846.html
Copyright © 2020-2023  润新知