美文网首页
iOS 协议与代理

iOS 协议与代理

作者: 黑夜中的星辰 | 来源:发表于2019-11-02 11:05 被阅读0次

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

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

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

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

    所有类的基类NSObject

    所有协议的基协议NSObject

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

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

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

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

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

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

    #import <Foundation/Foundation.h>

    @protocol TestProtocol <NSObject>

    @optional

    - (void)testOptional;

    @required

    - (void)testRequired;

    @end

    #import <UIKit/UIKit.h>

    #import "TestProtocol.h"

    @interface ViewController : UIViewController

    @property (nonatomic, weak)id<TestProtocol>delegate;

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        [super viewDidLoad];

         [self.delegate testRequired];

    }

    @end

    #import "TestProtocol.h"

    #import "ViewController.h"

    @interface TwoViewController ()<TestProtocol>

    @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 协议与代理

          本文链接:https://www.haomeiwen.com/subject/tvaovctx.html