Protocol协议

1.@required和@optional关键字

  • @required:这个方法必须要实现
  • @optional:这个方法不一定要实现
#import <Foundation/Foundation.h>

@protocol CommonProtocol <NSObject>

@required
-(void)eat;
-(void)sleep;

@optional
-(void)play;

@end

2.只要父类遵守了某个协议,那么子类也遵守

Animal.h
#import <Foundation/Foundation.h>
#import "CommonProtocol.h"
@interface Animal : NSObject<CommonProtocol>
@property(weak,nonatomic)id<CommonProtocol>delegate;
@end

Animal.m
#import "Animal.h"
@implementation Animal
-(void)eat{
    if ([self.delegate respondsToSelector:@selector(eat)]) {
        [self.delegate eat];
    }
}
-(void)sleep{
    if ([self.delegate respondsToSelector:@selector(sleep)]) {
        [self.delegate sleep];
    }
}
-(void)play{
    if ([self.delegate respondsToSelector:@selector(play)]) {
        [self.delegate play];
    }
}
@end

Dog.h
@interface Dog : Animal
@end

Dog.m
@implementation Dog
-(void)eat{
    NSLog(@"%s",__func__);
}
@end

3.OC不能继承多个类(单继承)但是能够遵守多个协议

#import "SportProtocol.h"
#import "StudyProtocol.h"

@interface Student : NSObject <SportProtocol, StudyProtocol>

@end

4.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明

@protocol A
-(void)methodA;
@end

@protocol B <A>
-(void)methodB;
@end
@interface Student : NSObject <B>
-(void)methodA; // 同时拥有A/B协议中的方法声明
-(void)methodB;
@end
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:黄杰玲 公司:上海陈工电控科技有限公司 【日精进打卡第86天】 【知~学习】 《大学》 2遍 《六项精...
    诗涵_9e94阅读 760评论 0 0
  • 今天真是值得纪念的一天,因为烂笔头设计笔记系列开始啦!是的,正如我们常常听到的,好记性不如烂笔头,口口声声说热爱设...
    子玥闲叙阅读 4,059评论 1 1