• 可以用来声明一大堆方法(不能声明成员变量)
  • 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明
  • 只要父类遵守了某个协议,就相当于子类也遵守了
 
//定义一个名叫MyProtocol的协议
MyProtocol.h
@protocol MyProtocol <NSObject>
    @required//要求实现,不识闲会发出警告,如果什么都不写,默认是@required
-(void) test;
-(void) test2;
    @optional//不要求实现
-(void) test3;
@end
 
Person.h
@protocol MyProtocol;//协议的提前声明,类似@class
@interface Person : NSObject <MyProtocol>
 
@end
 
Person.m
#import  MyProtocol.h;
@implementation Person 
-(void) test{
 
}
-(void) test2{
 
}
@end
 
  • 一个协议可以遵守其他多个协议,多个协议之间用逗号 , 隔开
  • 一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明

@protocol 协议名称 <>

@end

1》类遵守协议:

@interface 类名 : 父类名<协议名称1,协议名称2>
@end
2》协议遵守协议:
@protocol 协议名称 <其他协议名称1,其他协议名称2>
@end

1. 基协议

  • NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
  • 其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
  • NSObject协议中声明很多最基本的方法,比如description、retain、release等
  • 建议每个新的协议都要遵守NSObject协议
要求obj3保存的对象必须是遵守MyProtocol这个协议;
NSObject<MyProtocol> *obj3;
id<MyProtocol> obj3;
要求obj4,保存的对象必须遵守MyProtocol3,并且继承了Person
Person<MyProtocol3> *obj4;
@property中声明的属性也可用做一个遵守协议的限制
@property (nonatomic,strong)类名<协议名称> * 属性名;
@property (nonatomic,strong)id<协议名称>  属性名;
 
 
协议可定义在单独.h文件中,也可以定义在某个类中
1》如果这个协议只用在某个类中,应该把协议定义在该类中
2》如果这个协议用在很多类中,就应该定义在单独文件中
 
分类可定义在单独.h和.m文件中,也可以定义在原来类中
1》一般情况下,都是定义在单独文件
2》定义在原来类中的分类,只要求能看懂语法
 
 
#import "TicketDelegate.h"
@interface Person : NSObject
-(void) buyTicket;
//拥有一个代理属性,代理的类名随便,必须遵守TicketDeltegate协议
@property (nonatomic,retain) id<TicketDelegate> delegate;
 
@end

protocol(协议)的更多相关文章

  1. Objective-C( protocol协议)

    protocol 协议 protocol:用来声明方法 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 2.如何遵守协议 1> ...

  2. ISO 基础之 (十三) protocol 协议

    一 简绍 protocol,简单来说就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现.这种模式一般称为代理(delegation)模式.通过Protocol定义各种行为,在不同的场景采 ...

  3. 【转】iOS开发-Protocol协议及委托代理(Delegate)传值

    原文网址:http://www.cnblogs.com/GarveyCalvin/p/4210828.html 前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来 ...

  4. OC语法10——@protocol协议,

    参考资料:博客 @protocol,协议: OC中protocol的含义和Java中接口的含义是一样的,它们的作用都是为了定义一组方法规范. 实现此协议的类里的方法,必须按照此协议里定义的方法规范来. ...

  5. iOS开发-Protocol协议及委托代理(Delegate)传值

    前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...

  6. Tabular DataStream protocol 协议

    Tabular DataStream protocol 协议 Freetds 创建过程 https://wenku.baidu.com/view/2076cbfaaef8941ea76e0576.ht ...

  7. DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析

    DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析 问题背景 最近在工作中遇到了连接外网的交换机在IPv6地址条件下从运营商自动获取的DNS地址与本 ...

  8. SIP (Session Initiation Protocol) 协议

    Session Initiation Protocol 介绍 SIP是VoIP技术最常使用的协议,它是一种应用程序层协议,可与其他应用程序层协议配合使用,以控制Internet上的多媒体通信会话. V ...

  9. protocol(协议)的一些要点

    //遵循协议的变量声明 //要求你创建的PErson对象必须是遵循了 PersonProtocol Person<PersonProtocol> * p2 = [[Person alloc ...

随机推荐

  1. linq读书笔记3-操作符之select与selectmany

    linq对数据的查询方式的表达形式主要有两种: var demo =from p in pList where p.id=*** select p; var demo =pList.where(p=& ...

  2. 【转】关于ios10中ATS的问题

    原文连接:https://onevcat.com/2016/06/ios-10-ats/ WWDC 15 提出的 ATS (App Transport Security) 是 Apple 在推进网络通 ...

  3. N - Robot Motion(第二季水)

    Description A robot has been programmed to follow the instructions in its path. Instructions for the ...

  4. JavaWeb限流QPS简易框架

    Java Web利用filter实现拦截请求,统计信息.并控制单台机器QPS. /** * 网络流量控制器 */ public class TrafficFilter implements Filte ...

  5. 初识HTML5

    1, 新增canvas标签,允许通过JS在客户端完成2D绘图 2, 新增Video/Audio标签,能取代flash实现媒体播放 3, 新增本地存储功能:localStorage/sessionSto ...

  6. 绑定事件导致发送多个ajax请求的问题

    如果遇到每次触发click, change等事件时ajax请求都会增加一个,这种情况很有可能是每次触发事件都会多绑定一个事件,解决办法就是在每次绑定事件之前要解除绑定.

  7. Max Num---hdu2071

    Max Num Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  8. 【转】Delphi内嵌ASM简易教程

    Delphi内嵌ASM简易教程 作者:heiying2006-03-19 18:33分类:默认分类标签: 前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入 ...

  9. Android: ScrollView监听滑动到顶端和底端

    在项目中需要监听ScrollView滑动到顶端和底端的时候以实现自己的ScrollView,那么怎样去监听呢?今天查看了一下ScrollView的源码,找到了一种方法.先看一下源码中的overScro ...

  10. 今天在研究jquery用ajax提交form表单中得数据时,学习到了一种新的提交方式

    今天在研究jquery用ajax提交form表单中得数据时,学习到了一种新的提交方式 jquery中的serialize() 方法 该方法通过序列化表单值,创建 URL 编码文本字符串 序列化的值可在 ...