Object-C动态特性之protocol

在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非常简单,如下:
@protocol MyProtocol <NSObject>
// list of methods and properties
@end


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


另外,protocol还可以继承另一个protocol。
@protocol A
-(void)methodA;
@end
@protocol B <A>
-(void)methodB;
@end


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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值