//协议
#import <Foundation/Foundation.h>
//定义一个协议类
@protocol mDelegate <NSObject>
@required
- (void)thisIsADelegateMethodYouMustAchive;
@optional
- (void)thisIsADelegateMethodYouCanNotAchive;
@end
@interface Delegate : NSObject
@property (nonatomic, retain) id<mDelegate>delegate;
- (void)thisIsAMethodToShowHowToUseDelegate;
@end
#import "Delegate.h"
@implementation Delegate
- (void)thisIsAMethodToShowHowToUseDelegate
{
//告诉遵循这项协议的类什么时候实现这个协议中的方法
[_delegatethisIsADelegateMethodYouMustAchive];
[_delegatethisIsADelegateMethodYouCanNotAchive];
}
@end
/*协议:
1、协议是多个类共享的一个方法列表。协议中列出的方法在本类中没有相应的实现,由其他遵循了该协议的类来实现
2、协议不引用任何类它是无类型的(classless)
3、如果一个类遵循了某项协议,其子类遵循这项协议(但这并不意味着对于该子类,也需要实现协议中的方法)
4、使用可以使用 conformsToProtocol: 来检测一个方法是否遵循某协议如:
id test;
[test conformsToProtocol:@protocol(mDelegate)];
5、协议名必须唯一
6、协议中有两个属性@required和@optional
@required属性的要求遵循协议的类必须要实现这协议列表中的所有方法
@optional属性则没有这个要求,你可以实现也可以不实现,还可以实现其中的几个方法
非正式协议:
非正式协议实际上是一个分类,列出了一组方法但没有实现他们,这组方法的实现由该类的子类去选择实现,
并且在子类的接口部分需要重新声明这些方法。
在Objective-C 2.0 中用协议的@optional指令取代了非正式协议*/