OC 重点block-------1-------基本使用

来源:互联网 发布:免激活windows xp 编辑:程序博客网 时间:2024/05/20 06:23

block的使用,确实是很重要,也是苹果强推的东西,再巩固下

1.OCC的基础上做的三件事情

 面向对象繁琐复杂的简化C的基础上,新增的数据类型(BOOL Boolen class SEL nil id block

 

2. Block---是一个数据类型,既然是个数据类型,那么就可以声明这个数据类型的变量,所以block,完全可以声明一个block类型的变量

    block类型的变量中可以存储什么样的数据:1.blcok是一个数据类型,所以我们可以声明一个block类型的变量,

        2.block类型的变量中抓们存储一段代码,这段代码可以有参数,可以有返回值。

        

 3.block变量的声明:

   1)。虽然这个block变量中是用来存储一个代码的,但是block变量中,并不是任意的一段代码都可以存进去的,而是有限定的,也就是说我们在声明这个block变量的时候,必须要指定这个block变量,存储的代码段,是否有参数,是否有返回值,一旦指定以后这个block变量中就只能存储这样的代码了。

   譬如:声明一个block变量,返回值void参数是一个int类型的,这个时候,这个block变量中,就只能存储无返回值并且有一个int参数的代码段

    2)。声明block变量的语法格式:

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

        void(^myBlock1)();表示声明一个block类型的变量,叫做myBlock1这个变量只有存储没有返回值,没有参数的代码段。

        int(^myBlock2)();

        int(^myBlock3)(int num1,int num2);这个变量返回值是int,两个参数的代码段。

    3).最重要的是,声明block变量的时候要制定这个block变量可以存储的代码段的返回值和参数描述,一旦指定,这个block变量,就只能存储这样的代码段,其他格式代码无法存储

4,初始化,block变量

    1)。原理:写一个符合block要求的代码段,存储到block变量中就可以了,

    2.代码段的书写格式:

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

    代码段;

        };

 6.block的简写

    1)。如果我们的代码段没有返回值,那么代码段void可省略

    2)。如果代码段没有参数,那么()也可省略,如果代码段没有参数也没返回值,那么可以都省略

    3)。如果生命block的时候,如果有指定的参数,可以只写参数的类型,而不懈参数的名称

    4)。无论代码段是否有有返回值,在写代码的时候,可以不写返回值类型(如果再写代码段的时候,省略了返回值,这个时候系统会自动的确定返回值的类型,如果带么段中没有返回数据,那么他会认为这个代码段没有返回值的,如果代码中有返回值,返回数据是什么类型,他就会认为这个代码是什么类型的)

 

 

 7.简化block变量的复杂定义

    1)。typefy:讲一个长类型定义为一个短类型

    2)。我们可以用typedef讲长类型的block类型,定义为一个短类型

     typedef void (^newType)();   是一个block类型,无参数无返回值的类型


 

 

 8.block也可以作为返回值:当讲block作为函数的返回值的时候,返回值的类型必须要使用typedef定义的短类型

 

 9.block和函数的区别

    相同点:都是封装一段代码

    不同点:block是个数据类型,函数是一个函数;

        所以我们可以声明一个block类型的变量,函数只是个函数:

        block可以作为函数的参数,而函数不能直接作为函数的参数


--------------------由于block 挺重要的,后面分开很多板块在补充着内容

 */




    3)譬如无参数无返回值的代码段

        ^void(){

            NSLog(@"nisb");

            NSLog(@"sbnishi");

        };

       这个时候,我们就可以将这段代码使用赋值符号存储到,无返回值无参数要求的block变量中。

         myBlock1 = ^void(){

         NSLog(@"nisb");

         NSLog(@"sbnishi");

         };

       当然也可以在声明block变量的同时使用符合要求的代码段初始化

    4)。有返回值的代码段

        ^int(){

            int num1 = 10;

            return num1;

            };

       我们就可以将这段代码赋值给要求的代码段就可以了


 

 5.如何执行,存储在block中的代码段

   语法格式:block变量名();





#import <Foundation/Foundation.h>


int main(int argc,constchar * argv[]) {

    @autoreleasepool {

//        void(^myBlock1)();

//        int(^myBlock2)();

//        int(^myBlock3)(int num1,int num2);

    

        

        void(^myBlock1)() = ^void(){

            NSLog(@"我爱你");

            NSLog(@"我恨你");

        };

        

        int(^myBlock2)() =  ^int(){

            int num1 =10+20;

            return num1;

        };

        

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

            int num3 = num1 +num2;

            return num3;

        };

        

        myBlock1();

        int sum = myBlock2();

        NSLog(@"sum----====%d",sum);

        

       int sum2 =  myBlock3(100,200);

        NSLog(@"sum2====%d",sum2);

        

    }

    return0;

}



 


0 0
原创粉丝点击