Objective-C协议

协议是什么

协议是一系列方法的声明,没有类的定义,协议声明的方法会被使用协议的类实现,任何类都可以使用协议,并实现它的方法

 

Objective-C提供一种正式声明一组方法的途径,这就是协议。

 

声明一个协议

通过一个@protocol指令来声明一个正式的协议

@protocol ProtocolName

method declarations

@end

 

可选的协议方式

协议方法可以通过@optional关键字标识为可选,@required关键字标示为必选,如果你没有指定任何关键字,那么默认为@required

 

非正式协议

除了正式协议,你也可以定义一个非正式协议,通过将将方法组织在一个类别声明中

非正式协议通常声明为NSObject类的类别,因为几乎每个类都会继承NSObject

有时,非正式协议也被称为抽象(abstract)协议

 

采用一个协议

采用一个协议类似于声明一个父类,因为两者都会给这个类分配方法。父类的声明分配它继承的方法,协议的声明分配它在协议列表中的方法。如过一个类在它的声明中,把协议列在了它父类声明后面的尖括号中,就说明它采用了一个正式协议

@interface ClassName : ItSuperclass <protocol list>

在类别中采用协议也类似

@interface ClassName (CategoryName) <protocol list>

一个类可以采用多个协议,协议列表通过逗号分隔

@interface Classname : ItSuperclass <p1, p2, p3>

 

采用了协议的类或者类别必须实现所有协议声明中要求实现的方法,否则编译器将给出警告

采用了协议的类或者类别必须导入协议位置头文件并且无需再次声明

一个类可以光采用协议而不定义自己的方法

通过给对象发送conformsToProtocol消息检查是否遵循了某个协议

 

类型检查

可以扩展对象的类型声明,给编译器提供另一种级别的类型检查

id <person> aObject;

这里将所有遵循person协议的对象归为一个类型,编译器可以确保只有遵循这个协议的对象被赋予这个类型

 

协议中的协议

协议中可以使用其他协议,语法跟类采用协议一样

@protocol ProtocolName <protocol list>

任何遵循了协议的对象也要遵循协议中的协议

 

向前引用协议

@protocol ProtocolName

使用@protocol指令时,会通知编译器,ProtocolName是一个晚些时候会定义的协议,它是存在的。

转载于:https://www.cnblogs.com/linqianqiu/archive/2012/08/13/2636125.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值