zoukankan      html  css  js  c++  java
  • Protocol

    简单来说就是一系列方法的列表,其中声明的方法可以被任何类实现。这种模式一般称为代理(delegation)模式

    在iOS和OS X开发中,Apple采用了大量的代理模式来实现MVC中View(UI控件)和Controller(控制器)的解耦

    一、Protocol的定义

    在声明文件(MyBtnDelegate.h文件)中定义

    #import <Foundation/Foundation.h>
    
    @class MyBtn;
    
    @protocol MyBtnDelegate <NSObject>
    
    @required
    
    - (void) btnClick: (MyBtn *)sender;
    
     
    
    @optional
    
    - (void) btnInit: (MyBtn *)sender;
    
    @end

    以上代码可以单独放在一个h文件中,也可以写在相关类的h文件中,视具体情况而定

    该Protocol包含两个方法,btnClick:和btnInit:

    这里还有两个关键字,@required@optional,表示如果要实现这个协议,那么btnClick:方法是必须要实现的,btnInit:则是可选的,这两个关键字是在OC 2.0之后加入的语法特性。如果不注明,那么方法默认是@required的,必须实现

    MyBtnDelegate是Protocol的名称

    <NSObject>代表这个Protocol实现了NSObject协议

    二、Protocol的实现

    创建一个普通OC类,在h文件中引入包含Protocol的h文件(或者用@protocol声明这个协议,作用跟@class类似, 建议用这种方式)

    // #import "MyBtnDelegate.h"
    
    @protocol MyBtnDelegate;
    
    @interface MyController : NSObject<MyBtnDelegate>
    
    @end

    <>括起来的MyBtnDelegate就是我们创建的Protocol。如果要实现了多个Protocol,可以在尖括号内引入多个Protocol名称,并用逗号隔开即可。例如<MyBtnDelegate,xxxDelegate>

    .m文件如下

    #import "MyBtnDelegate.h"
    
    @implementation MyController
    
    - (void) btnClick: (MyBtn *)sender{
    
    NSLog(@"按钮被点击了!");
    
    }
    
    @end

    由于btnInit:方法是可选的,可以只实现btnClick:

    三、Protocol的使用场景

    OC的Protocol和Java的接口很类似,如果一些类之间没有继承关系,但是又具备某些相同的行为,可使用Protocol来描述它们的关系,不同的类,可以实现同一个Protocol

    最常用的就是委托代理模式,Cocoa框架中大量采用了这种模式实现数据和UI的分离。例如UIView产生的所有事件的处理,都是通过委托的方式交给UIViewController完成。根据约定,框架中后缀为Delegate的都是Protocol,如UIApplicationDelegate,UITableViewDelegate等

    四、Protocol的注意

    一个Protocol本身是可以实现其它Protocol

    例如:

    @protocol MyDelegate <UIWebViewDelegate>
    
    @end

    可以使用conformsToProtocol判断某个类是否实现了某个Protocol

    例如:

    [obj conformsToProtocol:
    
    @protocol(MyDelegate)];
  • 相关阅读:
    neutron外网介绍
    oracle时间转换问题汇总
    redhat72普通用户计划任务实现守护进程
    Rabbitmq消息持久化
    rabbitmq消息流转分析
    Rabbitmq基本概念
    protobuf传文件存入oracle
    X32指令自动委托
    IT系统上线事宜
    可转债业务玩法
  • 原文地址:https://www.cnblogs.com/chenziqiang/p/4930440.html
Copyright © 2011-2022 走看看