【OC语言】第八天·block和Protocol


一、block
    1. 格式:
        1)  有参有返回值
            格式:           返回值类型 (^变量名)(参数类型及个数) = ^(形参列表){
                                    代码块语句;
                                    return ;
                                };
        2) 有参无返回值
             格式:        void (^变量名)(参数类型及个数) = ^(形参列表){
                                 代码块语句;
                              };
        3)  无参无返回值 block
              格式:void (^block变量名)() = ^(){
                            代码块的语句;
                           };
              优化:     void (^block变量名)() = ^{
                              代码块的语句;
                           };
        4) block变量的使用: block变量名();
    2.  给block起一个别名, Block 是一个类型,不在是一个单纯的变量了
    3.  block访问外部变量:定义变量,并且赋值。  当定义block的时候,block会把外部变量以const的方式复制一份, 存放到block的所在的内存中。
         定义变量时:以__block修饰,外部变量将不以const方式拷贝。在block内部修改外部变量值之后,该外部变量将会被修改 。 
    4. 返回值是 block类型的定义步骤:
       1)使用 typedef 定义一个新的类型
       2)用新定义的类型作为函数的返回值
       3)定义block变量接收 函数返回的结果
       4)执行block
     5. block使用技巧
       1) block助记符: inlineBlock
       2) 我们在定义block变量的时候,形参类型及个数这个位置处可以 加上形参名称

二、Protocol
    1.  什么是协议:  一些方法的声明,一般写到一个.h的头文件中
         分类:1)必须要实现  
                     2)选择实现
    2. 作用: 供其他的类去遵守,  如果一个类遵守了一个协议,就应该实现这个协议中定义的必须要实现的方法。
    3. 定义协议:
                @protocol xxx <NSObject>  默认情况下遵守 NSObject协议
                 @end
    4. 类遵守协议的格式:
        1)遵守一个协议:
               先导入头文件
               @interface 类名 :NSObject <xxx>
               @end
         2)遵守多个协议 
             @interface 类名 :NSObject <xxx,aaa,bbb>
             @end
    5. 使用协议的流程:
         1) 定义协议
         2)让类遵守这个协议
         3)实现协议中对应的方法(必须要实现的)
    6. 遵守协议的流程:
         1)导入 头文件
         2)遵守协议
         3)实现方法
        结论:当我们遵守了某个协议后,就相当于这个类有了协议中所有的方法的声明
    7. 注意事项
        1) 一个协议,可以遵守其他的协议
        2)一个类可以遵守多个协议 
        3)一个协议可以被多个类遵守
    8. 关键字
          @required 和 @optional 都是协议中的关键字
          @required 修饰的方法是必须要实现的,默认是必须实现的
          @optional 修饰的方法是可以实现,也可以不实现的
    9. 类型限制
      1)第一种类型限制:给id类型增加限制
      2)id类型的对象赋值的时候,必须是某个对象,并其遵守 了要求的协议
      3)在get方法中加限制,要求某一对象遵守要求的协议
    10.  @protocol 协议名
       1)要遵守这个协议的类,用@protocol 告诉编译器这是一个协议
       2)在.m 文件中,导入协议头文件
       3)在main函数中,也要导入协议的头文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值