zoukankan      html  css  js  c++  java
  • OC中的protocol

    类似于java中的interface接口类,没有含有抽象方法,让实现它的类,必须实现其中的方法

    OC中的协议(protocol):

    1 1)Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现
    2 2)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明
    3 3)只要父类遵守了某个协议,那么子类也遵守
    4 4)Protocol声明的方法可以让任何类去实现,protocol就是协议
    5 5)OC不能继承多个类(单继承)但是能够遵守多个协议,继承(:),遵守协议(<>)
    6 6)基协议:<NSObject>基协议,是最根本最基本的协议,其中声明了很多最基本的方法
    7 7)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一个协议中的方法声明

    protocol的使用流程

    协议的使用流程:
        定义协议--->在类中采用指定的协议--->实现协议中的方法(注意方法有必须实现和选择实现两种)
    
        定义协议:
                @protocol 协议名称<NSObject>
                    //方法声明列表
                @end;
                
                注意:协议默认的要采纳NSObject的协议
    
        采纳协议:
                1)类遵守协议
                    某个类遵守某个协议
                    @interface 类名 : 父类 <协议名称>
                    @end
    
                    某个协议遵守某个或者某些协议,一个协议可以遵守其他多个协议,多个协议之间用逗号  , 隔开.
                    @protocol 协议名称 <其他协议名称1,其他协议名称2>
                    @end
                2)  协议遵守协议
                    @protocol 协议名称<其他协议名称>
                    @end;

    创建协议

    protocol中的@required 和 @optiona 的使用

     1 @required和 @optiona是协议方法声明中的两个关键字
     2 它们主要用于控制方法是否要实现(默认是@required),在大多数情况下,用途在于程序员之间的交流
     3 @required:这个方法必须要实现(若不实现,编译器会发生警告)
     4 @optional:这个方法可以选择实现(不实现,编译器不会发生警告)
     5 其实没什么价值,因为无论哪个修饰,无论实不实现,IOS是弱语法都不会对运行产生影响
     6     
     7         例: 
     8             @protocol RunProtocol<NSObject>
     9 
    10             @required
    11                 -(void)run;
    12             @optional
    13                 -(void)eat;
    14             @end    

    protocol类型限制

     1 1.使用id存储对象时,对象的类型限制
     2 
     3         格式; id<协议名称> 变量名
     4 
     5     
     6         例:      @property (nonatomic,strong) id <MyProtocol> person;
     7                     //标示传入的对象 必须实现了指定的协议
     8 
     9 2.对象赋值时类型限制
    10         使用类也同样如此
    11         格式: 类名<协议名称> *变量名
    12         NSObject <Myprotocol> *obj;
    13 
    14 3.对象关联关系下,对象的类型限制
    15     

    protocol代理设计模式

    1 代理模式概念:
    2     传入的对象,代替当前类完成了某个功能,成为代理模式
    3 
    4 采用协议实现代理模式的主要思路为:
    5        1)定义一个协议,里面声明代理类需要实现的方法列表,比如这里一个代理类需要实现meetingNotify与businessTrip方法
    6         2)创建一个代理类(比如PersonAssistant,BossAssistant),遵守上面的代理协议
    7         3)在需要代理的类中(Person),定义一个对象类型为id 且遵守代理协议的成员变量
    8         4)在Person类中调用成员变量_delegate(代理)的方法,调用代理类的方法
    9         5)main.m或其他使用Person类的文件中,为Person类的成员变量(代理类)赋值

    protocol代理模式应用场合

    1 1)监听器的场合
    2 2)通知的场合
    3 3)有写事情,不想自己处理,想交给别人处理

     protocol引用问题

     1 @class 代表这是一个类,具体引用在.m文件中 #import 进行导入
     2 
     3 同样 protocol 也可以这样
     4 在.h文件中
     5         @protocol workProtocol;//告诉编译器这是一个协议
     6         @interface Person :NSObject <workProtocol>
     7                                                    //这里会报一个Cannot find protocol的警告,可以不用理会
     8 
     9         @end    
    10 
    11 要实现的时候在.m文件中
    12         #import "workProtocol.h"
    13 
    14 引入2:
    15     也可以在类的.h文件中直接引入带实现
    16     @protocol runProtocol <NSObject>
    17         -(void) run;
    18     @end
    19     
  • 相关阅读:
    libcurl在mac上编译
    Kafka入门经典教程
    mac kafka 环境搭建 以及PHP的kafka扩展
    Mac下安装php-memcached扩展
    Mac使用brew安装nginx,并解决端口80访问权限问题
    Git的基本使用汇总整理
    MySQL InnoDB 共享表空间和独立表空间
    VB中如何修改treeview的背景色
    转:Python yield 使用浅析
    设置TreeView背景色
  • 原文地址:https://www.cnblogs.com/developer-wang/p/4506531.html
Copyright © 2011-2022 走看看