iOS 协议与代理

协议用来声明方法,一个类只要遵守了Protocol,就拥有了这个协议的方法声明

父类遵守的话,子类也遵守了

一个协议遵守了其他协议就相当于拥有了其他协议中的方法声明

一个类可以遵守多个协议,一个协议也可以遵守多个协议

所有类的基类NSObject

所有协议的基协议NSObject

NSObject协议声明了很多基本的方法,比如description、retain、release等

协议分为正式协议和非正式协议

@optionoal关键字声明的方法可选实现

@required关键字声明的方法必选实现

遵循它的类必须实现必选实现

如果遵循它的类没被设置代理的话,自己可选择适当的时候进行协议方法的调用

#import

@protocol TestProtocol

@optional

- (void)testOptional;

@required

- (void)testRequired;

@end

#import

#import "TestProtocol.h"

@interface ViewController : UIViewController

@property (nonatomic, weak)iddelegate;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

     [self.delegate testRequired];


}

@end

#import "TestProtocol.h"

#import "ViewController.h"

@interface TwoViewController ()

@end

@implementation TwoViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    ViewController *vc = [ViewController new];

//设置代理

    vc.delegate = self;

}

//代理实现

- (void)testRequired{

    NSLog(@"this is a testDemo");

}

从上面的代码可以看出,ViewController没有遵循协议,但它设置了遵循协议的一个代理属性delegate,

TwoViewController遵循并实现了代理,至于TwoViewController什么时候调用协议方法,是由ViewController来决定的。  [self.delegate testRequired];

如果TwoViewController没被设置代理的话,自己可选择适当的时候进行协议方法的调用

- (void)viewDidLoad {

    [super viewDidLoad];

//    ViewController *vc = [ViewController new];

//    vc.delegate = self;

    [self testRequired];

}

- (void)testRequired{

    NSLog(@"this is a testDemo");

}

多态,父类的指针指向子类的对象,子类重写父类的方法

有继承才有多态

你可能感兴趣的:(iOS 协议与代理)