iOS 协议与代理

协议用来声明方法,一个类只要遵守了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");

}

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

有继承才有多态

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 最近看了许多有关协议与代理的文章,自己试着总结了一下,如果有什么不对的地方欢迎指出~ delegate和 prot...
    噫那里有条咸鱼阅读 1,386评论 4 11
  • 结束了一整天的奔波和忙碌,终于可以安安静静地坐在沙发上,捧起一杯热气腾腾的庐山云雾香茗,听着自己情有独钟的班得瑞音...
    苏城之歌阅读 246评论 0 6
  • 那年你正好在我身旁,好像在回忆里还有那么一点长,我在你身后看你嬉闹歌唱,感受你所有欢笑哭泣和忧伤,却默默数着日子不...
    晴心_7e07阅读 328评论 0 8
  • 服务发现——Netflix Eureka 服务调用——Netflix Feign 熔断器——Netflix Hys...
    杨小华etz阅读 628评论 0 0