协议与非正式协议

//协议

#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指令取代了非正式协议*/

原文地址:https://www.cnblogs.com/chenhaosuibi/p/3440656.html