Objective-C动态特性之protocol

移动开发 iOS
Protocol在具体的使用过程中基本上采用了“Delegation”模式,即采用Protocol定义方法,然后不同的类使用不同的具体实现,从而完成某个行为的多态。 在iOS的SDK类库中大量使用了这样的Delegate的模式,比方说UITableViewDataSource定义了Table View如何使用数据源的一系列方法,开发者需要使用Table View时,就需要实现这一系列方法,然后把自己定义的Table View delegate给当前对象。这样,不同界面的Table View就可以基于自身对象的实现做不同的展现。

在Object-C中,Protocol被用来定义一组独立于具体类的属性和方法,其不具体实现这些方法,任何类都可以实现Protocol,Protocol可以继承另一个Protocol,从特征上看Protocol的作用类似于Java世界的接口。

Protocol在具体的使用过程中基本上采用了“Delegation”模式,即采用Protocol定义方法,然后不同的类使用不同的具体实现,从而完成某个行为的多态。 在iOS的SDK类库中大量使用了这样的Delegate的模式,比方说UITableViewDataSource定义了Table View如何使用数据源的一系列方法,开发者需要使用Table View时,就需要实现这一系列方法,然后把自己定义的Table View delegate给当前对象。这样,不同界面的Table View就可以基于自身对象的实现做不同的展现。

定义protocol非常简单,如下:

Object-c代码

  1. @protocol MyProtocol <NSObject>  
  2. // pst of methods and properties  
  3. [url=home.php?mod=space&uid=10695]@END[/url]  

除此之外,protocol定义时,还支持2个关键字,@required和@optional。顾名思义:凡是在@required后面的方法,实现该protocol的类必须实现,optional后面的方法可以不实现。默认所有的方法和属性都是@required的。

Object-c代码

  1. @protocol MyProtocol <NSObject> 
  2. // pst of methods and properties 
  3. @required 
  4. // pst of methods and properties 
  5. @optional 
  6. // pst of methods and properties 
  7. @end 

另外,protocol还可以继承另一个protocol。

Object-c代码

  1. @protocol A 
  2. -(void)methodA; 
  3. @end 
  4. @protocol B <A> 
  5. -(void)methodB; 
  6. @end 

实现protocol也非常简单, 在Object-C中,一个类要使用某个protocol,只需要在类定义时加上‘<ProtocolName,...>’就行了。

Object-c代码

  1. @interface MyClass : NSObject <MyProtocol, AnotherProtocol, YetAnotherProtocol> 
  2. ... 
  3. <A href="mailto:.@end">@end</A> 

最后,和Java中的接口一样,一旦某个对象实现了某个protocol, 那么就可以用该protocol的指针来指向该对象。这就是为什么当当前对象实现了UITableViewDataSource protocol,就可以把Table View的delegate赋值给当前对象。 在UITableView的代码中,dataSource属性的定义是这个样子的。

  1. Object-c代码 
  2. .... 
  3. id <UITableViewDataSource> _dataSource; 
  4. &helpp; 
责任编辑:闫佳明 来源: apkbus
相关推荐

2014-11-25 10:18:17

Objective-C

2014-08-05 13:09:34

Objective-C动态特性

2013-05-02 10:51:17

iOS开发Objective-C@property

2015-11-02 10:13:41

iOSObjective-C语法

2011-08-22 09:34:50

Objective-C多态动态类型

2011-08-03 16:22:05

Objective-C CodeBlocks

2011-08-04 13:55:10

Cocoa Objective- 文件

2011-08-10 18:07:29

Objective-C反射

2011-07-29 15:47:21

iPhone开发 Objective- C

2011-05-11 11:20:26

Objective-C

2013-03-27 12:54:00

iOS开发Objective-C

2013-06-20 10:40:32

Objective-C实现截图

2011-05-11 15:58:34

Objective-C

2014-09-26 09:49:48

SwiftObjective-C

2011-07-28 15:11:23

iOS Objective-

2014-12-12 14:57:11

Objective-C封装

2011-08-09 15:53:28

2011-05-11 15:45:50

内存管理Objective-C

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-05-11 14:06:49

Objective-C
点赞
收藏

51CTO技术栈公众号