zoukankan      html  css  js  c++  java
  • 【Object-C】协议 @protocol

    作用类似于接口。用于多个类应该遵守的方法。
    协议定义的时多个类共同的公共行为规范,这些行为是于外部交流的通道,这就意味着协议里通常是定义一组公用方法,但不会为这些方法提供具体实现,方法的实现交给类去实现。

    同一个类的内部数据、和方法的实现细节完全相同,但是
    类是一种具体实现。而协议则规定了一种规范,协议定义某一批类所需要遵守的规范,不关心这些类的内部数据和方法的实现细节,只是规定遵循该协议的这一批类中必须提供某些方法,提供这些方法的类就可以满足实际需求。

    协议不提供任何实现。协议体现的是规范和实现分离的设计哲学。

    可以使用类别来实现非正式协议。但是Object-c 并不强制实现该协议中的所有的方法,当类中没有实现这些方法时可能就会出现错误。

    遵守正式协议必须实现协议中定义的所有方法。可以通过@optional @required 来修饰协议
    @optional :协议方法可选,可实现也可不实现
    @required:协议方法必须遵守,必须实现。

    正式协议定义:
    @protocol 协议名 <父协议1,父协议2>
    {
       零到多个类或实例方法(协议)定义;
    }
    @end

    point:
    1、协议名和前面的类和类别从语法角度看很像
    2、一个协议可以有多个直接的父协议
    3、协议只能继承协议,不能继承类
    4、协议中定义的方法只有方法签名,没有具体的方法实现
    5、协议中定义的方法既可以是类方法,也可以是实例方法

    遵守(实现)协议
    在类定义的接口部分可以指定该类继承的父类,以及遵守的协议。一个类可以同时遵守多个协议。
    @interface 类名 : 父类<协议1,协议2>

    协议与委托delegate
    协议体现的是一种规范,定义协议的类可以把协议定义的方法委托给实现协议的类,这样可以让类定义具有更好的通用性质,将具体的实现交给遵守该协议的类区实现。

    使用协议来定义变量
    NSObject<协议1,协议2> * 变量 ;

  • 相关阅读:
    配置samba
    extern c
    剑指offer 孩子们的游戏
    剑指offer 扑克牌顺子
    剑指offer 翻转单词顺序列
    剑指offer 左旋转字符串
    mysql查看或显示当前存在多少数据库
    vim替换
    平衡二叉树
    将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
  • 原文地址:https://www.cnblogs.com/shujucn/p/7481475.html
Copyright © 2011-2022 走看看