Objective-c 协议(protocol)

  协议的作用类似地C++中对抽象基类的多重继承。类似于Java中的接口(interface)的概念。
  协议是多个类共享方法的列表, 协议中列出的方法在本类中并没有相应实现,而是别的类来实现这些方法。

  如果一个类要遵守一个协议,该类就必须实现特定协议的所有方法(可选方法除外).

  定义一个协议需要使用@protocol指令,紧跟着的是协议名称,然后就可以声明一些方法,在指令@end之前的所有方法的声明都是协议的一部分。如下:

@protocol NSCopying
-(id) copyWithZone:(NSZone*) zone;
@end

如果你的类决定遵守NSCopying协议,则必须实现copyWithZone方法。通过在@interface中的一对尖括号内列出协议的名称,告诉编译你正在遵守一个协议,比如:
@interface Test:NSObject <NSCopying>

实例:
Fly.h

#import <Foundation/Foundation.h>
@protocol Fly
  -(void) go;
  -(void) stop;
@optional
  -(void)sleep;
@end

FlyTest.h

#import <Foundation/Foundation.h>
#import "Fly.h"
@interface FlyTest:NSObject<Fly> {
}
@end

FlyTest.m

#import "FlyTest.h"
@implementation FlyTest
-(void) go {
   NSLog(@"go");
}
-(void) stop {
   NSLog(@"stop");
}
@end

test.m

#import <Foundation/Foundation.h>
#import "FlyTest.h"
int main( int argc, char* argv[]){
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
  FlyTest *flytest = [[FlyTest alloc]init];
  [flytest go];
  [flytest stop];
  [flytest release];

  [pool drain];
  return 0;
}

程序运行结果如下:

go
stop


@protocol的标准语法是:
@protocol 协议名<其它协议, …>
  方法声明1
@optional
  方法声明2
@required
  方法声明3

@end



@optional表明该协议的类并不一定要实现方法。
@required是必须要实现的方法。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值