设为首页 加入收藏

TOP

Objective-c 协议(Protocol)
2017-10-12 18:16:45 】 浏览:3063
Tags:Objective-c 协议 Protocol

  协议是多个类共享方法的列表,协议中列出的方法在本类中并没有相应的实现,而是由别的类实现的这些方法。一个类要遵守一个协议,该类就必须实现特定协议的所有方法(可选方法除外)。协议是一系列方法的列表,任何类都可以声明自身实现了某一个或一些协议。

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

1    @protocol NSCopying
2 
3    - (id) copyWithZone:(NSZone *) zone;
4 
5    @end 

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

    如果想遵守多个协议,只需要在尖括号中列出多个协议,并可用“ ,”隔开。比如:@interface Test: NSObject <NSCopying , NSCoding> 。

    你也可以自己定义协议,比如:

    

1 @protocol Fly
2 
3 - (void)go;
4 - (void)stop;
5 @optional  // 可选的方法,可实现也可不实现
6 - (void)sleep;
7 
8 @end

  下面就通过一个例子,来具体说明下协议的用法:

  

 1 #import <Foundation/Foundation.h>
 2 
 3 @protocol Study
 4 
 5 - (void)study;
 6 - (void)stop;
 7 
 8 @optional   // 可选的方法,此程序中选择不实现
 9 - (void)sleep;
10 
11 @end
12 
13 @interface Test : NSObject <Study>{
14     
15 }
16 - (void)study;
17 - (void)stop;
18 @end
19 
20 @implementation Test
21 
22 - (void)study{
23     NSLog(@"好好学习,天天向上!");
24 }
25 
26 - (void)stop{
27     NSLog(@"不学习,将很难成功!");
28 }
29 @end
30 
31 int main(int argc , const char *argv[]){
32     @autoreleasepool {
33         Test *test = [Test new];
34         
35         [test study];
36         [test stop];
37         
38         if([test conformsToProtocol:@protocol(Study)] == YES)   // 判断是否遵守了协议
39             NSLog(@"遵守了Study协议!");
40         else
41             NSLog(@"没有遵守协议!");
42     }
43     return 0;
44 }

  同时,在创建一个新协议的时候,也可以在原有的协议上面扩展,如:@protocol Study1 <Study>。

  接下来说明一下协议定义的标准语法,其格式为:

  

    @optional 表明符合该协议的类并不一定要实现方法声明中的各个方法,@required 是必须要实现的方法。协议类类似一个公共接口,它规定了多个类之间的接口。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇WIN7下OC开发环境的搭建 下一篇介绍 - OC中的代理模式

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目