Object-C中的非正式协议与正式协议

  之前对 "非正式协议"一词不甚理解,查阅一番后就自己的理解简单梳理一下,

  下面是苹果官方文档Cocoa Core Competencies一文中对非正式协议的介绍:

  An informal protocol is a category on NSObject, which implicitly makes almost all objects adopters of the protocol. (A category is a language feature that enables you to add methods to a class without subclassing it.) Implementation of the methods in an informal protocol is optional. Before invoking a method, the calling object checks to see whether the target object implements it. Until optional protocol methods were introduced in Objective-C 2.0, informal protocols were essential to the way Foundation and AppKit classes implemented delegation.

  可见非正式协议就是我们常用的类别(Category),而正式协议就是一个以@protocol方式命名的方法列表,与非正式协议相比不同的是,它要求显示的遵守协议。

时间: 2024-08-10 21:15:39

Object-C中的非正式协议与正式协议的相关文章

Objective-C 委托、非正式协议、正式协议

一.概念:1.委托(delegate,也叫代理):当一个对象接受到某个事件或者通知的时候,会向它的Delegate对象查询它是否能够响应这个事件或者通知,如果可以,这个对象就会给它的Delegate对象发送一个消息(执行一个方法调用).在这种机制下,您可以不进行子类化和方法重载,而是将自己的定制代码放到委托对象中,从而避免对复杂对象进行修改.当您感兴趣的事件发生时,复杂对象会将消息发送给您定制的委托对象.您可以通过这种“挂钩”执行自己的定制代码,实现需要的行为.2.非正式协议(informal

Object-C非正式协议与正式协议的区别

一.非正式协议 显然这个名词是相对于正式协议而言的.在解释非正式协议之前,先引用两段话: 1.在<Cocoa设计模式>第六章类别的6.3.2把类别用于非正式协议一节中,这样写到: 非正式协议通常定义为NSObject的类别.类别接口中指定的方法可能会或者可能不会被框架类实际地实现.非正式协议位于一种设计灰区中.正式协议由编译器检查并且代表一种关于对象能力的保证,但是非正式协议不会做出保证----而只会给出提示. 2.苹果官方文档Cocoa Core Competencies一文中是这样介绍非正

正式协议

正式协议的概念,可以通过在@protocol部分列出一组方法名来定义一个正式协议.通过在@interface声明中的类名之后列出用尖括号括起来的协议名称,对象可以采用该协议.当对象采用一个正式协议时,它承诺实现该协议中列出的每一个要求实现的方法.如果你没有实现协议中的所有方法,编译器将向你提出警告,从而帮助你旅行自己的承诺.

分布式系统中的概念--第一篇 一致性协议、一致性模型、拜占庭问题、租约

1,一致性协议 两阶段提交协议与Raft协议.Paxos协议 ①两阶段提交协议 在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败.当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等).因此,二阶段提交的算法思路可以概括为: 参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与

网络及数据在网络中传输所涉及到的协议们

网络:几部计算机主机或网络打印机之类的接口设备,通过网线或者无线网络技术将其连接起来,使得数据可以通过网络介质(网线以及其他网卡等硬件)来传输的一种方式. 网络分类: 1.以太网(Ethernet):局域网(local area network,LAN)使用的就是以太网 以太网络传输速度单位用的是Mbps,需要注意的是其中的b用的是bit而不是我们常用的byte,所以我们家中定宽带时的实际下载速度需要除以8才能够得到一般速度. 我们常见的网线就是用于传输以太网数据的,通过主机的网卡连接另一台主机

java的Object类中hashCode()和equals()方法-----转载

JAVA代码:    public static void main(String[] args)    {        Object obj1 = new Object();        Object obj2= new Object();        Object obj3 = obj2;        System.out.println("obj1==obj2 ?"+obj1.equals(obj2));        System.out.println("o

在网络7层协议中,如果想使用UDP协议达到TCP协议的效果,可以在哪层做文章?(QQ 为什么采用 UDP 协议,而不采用 TCP 协议实现?)

为了解决这题,可以具体看看下面这个讨论. 解灵运工程师 185 人赞同 某次架构师大会上那个58同城做即时通信的人说:原因是因为当时没有epoll这种可以支持成千上万tcp并发连接的技术,所以他们使用了udp,然后在udp上面封装了一下,模拟了一下tcp,解决了大并发的问题,之后因为做的很nb了,虽然epoll这种技术出现了,还是没有改回使用tcp了.现在再做类似的东西就不需要使用udp了.这个说法应该比较可信的. 发布于 2014-04-16 18 条评论 感谢 分享 收藏 • 没有帮助 • 

每天一个JavaScript实例-从js脚本中访问object元素中的SVG

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-从js脚本中访问object元素中的SVG</title> <style> </style> </head> &l

OC 中 类目、延展和协议

Category : 也叫分类,类目. *是 为没有源代码的类 扩充功能 *扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承 *该方法只能扩充方法,不能扩充实例变量 *添加的类目是一对 .h .m 文件,文件名为 原有类名 + 分类名 Extension :延展 *为能够获得源代码的类添加私有的实例变量和方法 *注意:延展操作的类是能够获得源代码的类(具有 .m 文件的类) *通过延展定义的方法属于私有方法,外界是没有访问权限的,只能在当前类的 .m 文件中访问