OC--Block的使用

Block:

1.//代码块的声明

void (^aBlock) (NSString *str);

// 代码块变量的赋值

aBlock = ^(NSString *str){

NSLog(@"%@", str);

};

// 提示:在声明代码块的时候,是可以传递多个参数的,中间使用‘,’分隔开就醒了,也可以不写出参数的名称,只写类型就可以,但是不建议这么做,因为别人看你的代码的时候可能会不理解,建议写全。要记住,最后面也是以分号结尾的。

// 代码块声明的时候返回值不可以省略,但是参数名可以省略

// 代码块变量赋值的时候返回值可以省略,但是参数吗不可以省略


2.代码块的声明比普通变量的声明复杂,普通变量不需要传入参数,并且没有返回值。因为代码块存储的数据是一个函数体,所以声明代码块变量时需要声明参数和返回类型。


3.‘^’叫做脱字符


4.// 调用代码块,直接使用名称调用即可,然后传递需要的参数,有返回值的接受下,反之不需要接收

void (^MyBlock) (NSString *str) = ^(NSString *str) {

            NSLog(@"%@", str);

        };

        MyBlock(@"abcdefjlfsd");


5.把代码块像对象一样传递

// 定义一个参数是代码块的方法

void useCodeBlock(int (^mmyBlock) (int x, int y)) {

    int result = mmyBlock(300, 200);

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

}

 

// 以代码块作为函数参数

        int (^addBlock) (int x, int y) = ^(int x, int y) {

            return x + y;

        };

        useCodeBlock(addBlock);

        int (^subBlock) (int x, int y) = ^(int x, int y) {

            return  x - y;

        };

        useCodeBlock(subBlock);


        // 以内联定义的代码块作为函数参数

        useCodeBlock(^int (int x, int y) {

            return x + y;

        });

        useCodeBlock(^int (int x, int y) {

            return x - y;

        });

// 通常来说,block都是一些简短代码片段的封装,适合做工作单元,通常用来坐并发任务、遍历、以及回调。用block作为回调函数,可以使得程序员写代码更顺畅,不用中途跑到另一个地方写一个回调函数。采用block,可以在调用函数时直接写后续代码处理,将其作为参数传递过去,供其任务执行结束时回调。


6.在代码块中使用全局变量和局部变量

    6.1.在代码块中可以使用全局变量,也可以更改

    6.2.在代码块中可以使用局部变量,但是不可以更改,如果要更改局部变量,需要加上‘__block’关键字,注意是两个下划线。


7.使用代码块进行NSArray和NSMutableArray的排序

#if NS_BLOCK_AVAILABLE

typedef NSComparisonResult (^NSComparator) (id obj1, id obj2);

#endid

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值