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

来源:互联网 发布:恒生指数期货模拟软件 编辑:程序博客网 时间:2024/06/11 17:08

一、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
原创粉丝点击