牛骨文教育服务平台(让学习变的简单)
博文笔记

Objective-c - block变量的声明和初始化

创建时间:2017-01-11 投稿人: 浏览次数:861

/* 

 Objective-c - block


    1> block类型的变量的声明:

 

        block:是一种数据类型,如同其他数据类型一样,我们可以声明一个block类型的变量用来存储数据.

 

        block类型的变量是专门用来存储一段代码的,这段代码可以有参数也可以有返回值.

        

        在声明block类型的变量的时候,必须指定这个block变量中可以存储的代码的参数和返回值描述,并且这个block变量中只能存储符合描述的代码,其他代码是无法存储的.

 

 

    2> block变量声明的语法:

        

        返回值类型 (^block变量名称)(参数列表)

 

        例1:

        void(^firstBlock)();

        即:声明了一个名称叫做firstBlock的block类型的变量,并且这个变量中只能存储没有参数,没有返回值的一段代码.

 

        例2:

        int(^firstBlock)(int num1, int num2);

        即:声明了一个名称叫做firstBlock的block类型的变量,并且这个变量中只能存储返回值为int类型且有两个int类型的参数的一段代码.

 

        一个block变量中只能存储和这个block变量要求相同的一段代码.

 

 

    3> block变量的初始化

 

        原理:

            写一段符合声明的block变量要求的代码,将这段代码存储到这个block变量中.

 

        语法格式:

            ^返回值类型(参数列表)

            {

                代码;

            };

        例1:

        //声明一个block变量

        void(^firstBlock)();

        //初始化

        firstBlock = ^void()

                    {

                        NSLog(@"大家好!");

                    };

        //代表名字叫firstBlock的变量中存储了一段代码.

 

         例2:

         //声明一个block变量

         int(^firstBlock)(int num1, int num2);

         //初始化

         firstBlock = ^int(int num1, int num2)

                     {

                        int sum = num1 + num2;

                        return sum;

                     };

         //代表名字叫firstBlock的变量中存储了一段代码.

 

 

    4> block代码块的调用执行

        

            语法格式:

                变量名();

                注:有参数就传参数,有返回值就接收.

 

 

    如下代码:

 

 */


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

   

    //声明一个无参数无返回值的block类型的变量并初始化

    void(^firstBlock)() = ^void(){

        NSLog(@"大家好!");

    };

    

    //声明一个有参数有返回值的block类型的变量并初始化

    int(^sumBlock)(int num1, int num2) = ^int(int num1, int num2){

        int sum = num1 + num2;

        return sum;

    };

    

    //调用

    firstBlock();

    

    NSLog(@"10 + 20 = %d", sumBlock(10, 20));

    return 0;

}


声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。