十年温如初 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、类扩展不能像类别那样拥有独立的实现部分,也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。
5小时前
和安乐 3星
共回答了356个问题 评论
1、协议Protocal
这个概念有很大程度上和C#的接口类似,但是它有所不同,它可以可选的实现接口@optional,也有必选的实现接口@required,虽然Objective-C里面已经有一个关键字 @interface,不过这个和Protocal还是有不同的。和C#的接口一样,这种协议也可以继承自另外一个Protocal,也就是他们可以有继承关系。
2、Protocol翻译过来, 叫做”协议”
在写java的时候都会有接口interface这个概念,接口就是一堆方法的声明没有实现,而在OC里面Interface是一个类的头文件的声明,并不是真正意义上的接口的意思,在OC中接口是由一个叫做协议的protocol来实现的
protocol它可以声明一些必须实现的方法和选择实现 的方法。这个和java是完全不同的。
3小时前
猜你喜欢的问题
5个月前1个回答
5个月前1个回答
5个月前1个回答
5个月前2个回答
5个月前1个回答
5个月前2个回答
热门问题推荐
3个月前1个回答
3个月前5个回答
2个月前1个回答
1个月前1个回答
1个月前1个回答
3个月前1个回答
朴智妍 朴孝敏谁更漂亮 要从客观主观上分析 不要有些人说是谁那就是谁 以自己的标准 爱分析
2个月前1个回答
1个月前1个回答
1个月前3个回答