protocal和protocol的区别

及时拥抱 2个月前 已收到3个回答 举报

十年温如初 1星

共回答了127个问题采纳率:96.1% 评论

一、概念:

1、非正式协议(protocol):所谓的非正式协就是类别,即凡是NSObject或子类的类别,都是非正式协议。

2、正式协议(protocal):指的是一个以@protocol方式命名的方法列表,与非正式协议不同的是,它要求显示的采用协议。你可以使用@required或者optional关键字指定方法是否必须实现。子类继承父类采用的协议。正式协议也可以遵守其他协议。

正式协议(protocal):

1、正式协议的方法类型

正式协议声明的方法有两种类型:

① @required

该类的方法要遵守相应协议的类中是必须实现的,不然编译器会警告(这是在编译时做的检查)

② @optional

该类的方法在遵守相关协议的类中是否实现是可选的。

2、正式协议存在的意义

正式协议可以将业务的方法定义剥离出来,形成了一个单独的文件。

非正式协议(informal protocol):

1、类别和匿名类别(类扩展)

所谓的类扩展,就是为一个类添加额外的原来没有的变量、方法或者合成属性。

2、类别和类扩展的区别:

1、类别中只能增加方法;

2、类扩展不仅能增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是@private类型的(作用范围只能再自身类,而不是子类或者其他地方);

3、类扩展中声明的方法没有被实现,编译器会报警,但是类别中的方法没有被实现编译器是不会有任何警告的。这是类扩展在编译阶段呗添加到类中,而类别是在运行时被添加到类中。

4、类扩展不能像类别那样拥有独立的实现部分,也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。

14小时前

28

和安乐 3星

共回答了356个问题 评论

1、协议Protocal

这个概念有很大程度上和C#的接口类似,但是它有所不同,它可以可选的实现接口@optional,也有必选的实现接口@required,虽然Objective-C里面已经有一个关键字 @interface,不过这个和Protocal还是有不同的。和C#的接口一样,这种协议也可以继承自另外一个Protocal,也就是他们可以有继承关系。

2、Protocol翻译过来, 叫做”协议”

在写java的时候都会有接口interface这个概念,接口就是一堆方法的声明没有实现,而在OC里面Interface是一个类的头文件的声明,并不是真正意义上的接口的意思,在OC中接口是由一个叫做协议的protocol来实现的

protocol它可以声明一些必须实现的方法和选择实现 的方法。这个和java是完全不同的。

12小时前

30

涐钔淂薆 1星

共回答了196个问题 评论

相同点都是名词,不同点是在意思上有不同含义。

protocal n.会谈记要

protocol n.礼仪;外交礼节;条约草案;议定书;

9小时前

10
可能相似的问题

热门问题推荐

Copyright © 2024 微短问答 All rights reserved. 粤ICP备2021119249号 站务邮箱 service@wdace.com