Block和Protocol

Block和Protocol

block的基本使用

什么是block?
Block是iOS中比较特殊的数据类型.Block是苹果官方特别推荐使用的数据类型,应用场景比较广泛.

应用场景:
- 动画
- 多线程
- 集合遍历
- 网络请求回调

Block的作用:
用来保存一段代码,可以在恰当的时间再取出来调用.
功能与函数或者方法比较类似.

函数与Block的区别:
函数不能在程序运行的过程中定义代码,函数是一开始的时候就已经写死的.block也是用来保存代码.
Block保存代码:把代码放到大括号中,在大括号的左大括号前面加上一个^标志是一个Block(这^的目的是说明后面的代码段要交给block存储),在大括号的右边大括号后面加上分号表示这个数据类型定义结束.以上这些相当于int a=10;中的数值10;
定义简单的Block变量(block跟函数很像,有返回值,有参数):
没有返回值时在前面写void,把变量名括起来,前面加个^,这样就代表block类型的变量名.logDonkeyTao是这个block的变量名,logDonkeyTao的变量中就存储了大括号中的代码.
- void:代表是返回值类型
- (^logDonkeyTao):代表block的变量名
- ():代表block的参数
block跟函数很像,只是在前面加一个^,然后在外面加一对括号.

block的调用:logDonkeyTao();

区别:block可以在函数里面定义也可以在外面定义,更加灵活.


    void (^logDonkeyTao)()^{

        TFLog(@"------------");

        NSLog(@"Donkey-Tao");

        NSLog(@"------------");

}

定义一个block,存储一段代码,这段代码的功能是可以打印任意行数的*


    void (^logDonkeyTao)(int)=^(int numberOfLines){

        for(int i=0;i<numberOfLines;i++){

            TFLog(@"------------");

            NSLog(@"Donkey-Tao");

            NSLog(@"------------");
        }
    }

调用block:

定义一个block计算两个整数的和
先写block:



    //定义有返回值有参数的block


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

        return num1+num2;

    };

    int c=sumBlock(10,9);



    int(^doubleBlock)(int);

    doubleBlock=^(int num){

        return 2*num;

    }

    //调用

    int d=doubleBlock(18);

block和typedef

typedef exisiting new;
typedef int Myint;


    //定义一个block来计算2个整数的差
    int (^minusBlock)(int,int)=^(int num1,int num2){

        return num1-num2;

    }

    //定义一个block来计算2个整数的积
    int (^multiBlock)(int,int)=^(int num1,int num2){

        return num1*num2;

    }


    //定义一个叫做MyBlock的数据类型,它存储的代码必须返回int,必须接受2个int类型的参数
    typedef int(^MyBlock)(int,int);

    MyBlock minusBlock=^(int num1,int num2){

        return num1-num2;  


    }

03-Block03-使用场景

严谨:调用block之前一定要判断block是否为空

04-Block04-使用注意

1.默认情况下,block里面是能够访问外面的内容的,block里面不能修改外面的数值.
2.要想修改外面的值,__block int b=10;这样就可以修改外面的变量的值.
3.

05-Protocol01-基本使用

protocol翻译过来就是”协议”,协议文件中只有方法的声明.可以把多个类共有的方法抽取出来,用一个协议来表示.一个类可以遵循多份协议.一个协议也可以遵守协议.

协议与父类不同,使用协议可以少一个类,使用继承时多一个

protocol的作用:
- 用来声明一些方法

protocol的其他使用,

协议中的关键字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值