zoukankan      html  css  js  c++  java
  • 协议与委托

    一. 协议

    1. 类似于接口,用于定义多个类应该遵守的规范:

      并不关心这些类的内部状态数据,也不关心这些类里方法的具体实现,只是规定这些类要提供某些方法。

    2. 使用@protocol关键字:

    1 @protocol 协议名 <父协议1, 父协议2, ...>
    2 {
    3   statement...    
    4 }

      注意:

      • 一个协议可以继承多个协议,但是协议不能继承类
      • 方法:只是声明,没有具体实现。

    3.  遵守协议的类(即代理):

    • 如果没有实现协议中的所有方法,编译器会发出警告:
      • @optional:声明的方法可选择是否实现
      • @required:声明的方法是必须要实现的。@required是默认行为
    @protocol FKPersonAction
    // 定义协议的方法
    @optional
    - (void) makeUp;
    @required
    - (void) walk;
    @end

      可选实现makeup方法,但是必须实现walk方法,否则编译器就会提示警告

    4. 声明对象的方法:

    • 方法一:实现类定义对象
    FKPerson *person = [[FKPerson alloc] init];
    • 方法二:协议来定义对象
      • NSObject<协议1, 协议2, ...> *变量;
      • id<协议1, 协议2, ...> *变量;
    • 注意:
      • 采用协议来定义对象,类似于其他语言使用接口定义变量的语法
      • 采用协议来定义对象,对象的编译时类型仅仅是所遵守的协议类型,所以只能调用该协议中定义的方法

    二. 协议与委托(delegate)

    1. 协议体现的是一种规范,定义协议的类可以把协议定义的方法委托给实现协议的类,这样可以让类定义具有更好的通用性,因为具体的动作将有该协议的实现类去完成。

  • 相关阅读:
    编写程序计算所输日期是当年的第几天
    如何使提取的星期为中文
    Recordset.State 属性
    Dependency Walker Frequently Asked Questions
    setlocale
    StringBuilder 拼接sql语句比较快
    用sql 语句给字段添加描述
    委托事件
    将一个tabel加到另一个table
    winform的tab跳到下一个
  • 原文地址:https://www.cnblogs.com/rachel-pzl/p/8167926.html
Copyright © 2011-2022 走看看