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方法的正式协议所代替。

posted on 2013-01-18 16:12  ios开发达人  阅读(193)  评论(0)    收藏  举报