Objective-C 学习笔记4 类的协议
1、objective-c中,实现文件不需要强制执行h中的方法声明,不管是interface还是protocol
2、使用@protocol 表示协议
3、协议有点类似C#中的泛型,当然不是一回事
下面定义个类
@interface Shape:NSObject -(void)print; @end
实现方法
@implementation Shape -(void)print{ NSLog(@"this is shape"); } @end
定义一个协议
@protocol Area -(void)draw; @end
使用这个协议
//Rectangle.h @interface Rectangle:NSObject<Area> @end
实现文件
@implementation Rectangle -(void) draw{ NSLog(@"this is four"); } @end
引用网上段落:正式协议(protocal)可以将业务中的方法定义剥离出来,形成一个单独的文件,这跟传统OO中的提取接口是不谋而合的。如果遇到二个系统需要交换数据,可以制定一套双方都遵守的protocal,然后这二个系统中都把这个协议文件添加到项目中,实现它即可。这一功能,非正式协议(@interface)就做不到。
此外,obj-C 2.0中对正式协议还做了一些扩展,允许把正式协议中的方法标识为“必须实现(@requied)”和“可选实现(@optional)”二类,如果协议中的方法被标识为@optional,即使采用该协议的类不实现这些方法,编译器也不会给出警告。这赋予了正式协议更多的灵活性。示例如下:
@protocol Area @requred -(void)draw; @optional -(void)look; @end
有了@optional关键字以后,其实“非正式协议”在语义上完全可以被“正式协议”所取代,事实上Cocoa中的非正式协议都在逐渐被标有@optional方法的正式协议所代替。
浙公网安备 33010602011771号