【@required与@optional的区别 Objective-C语言】

一、我们前面反复强调:

当1个类遵守了1个协议,这个类就拥有这个协议中的所有的方法声明

仅仅是只有声明而已,还要自己实现

如果不实现呢,也不会报错,只是给1个警告

1.下面呢,给大家介绍两个修饰符

@required 与 @optional

这两个修饰符,是专门用来修饰协议当中的方法的

2.例如,我这儿有个协议

SportProtocol

这个协议中有两个方法

爬山的方法 - (void)paShan;

游泳的方法 - (void)swim;

我们刚刚说过,协议中的方法可以用两个关键字来修:@required 和 @optional

#import <Foundation/Foundation.h>

@protocol SportProtocol < NSObject >

@required

- (void)paShan;

@optional

- (void)swim;

@end

二、@required与@optional有什么区别呢

1.被@required修饰的方法,遵守这个协议的类如果没有实现的话,编译器就会给1个大大的警告

在协议当中,如果方法的声明被@required修饰,那么遵守这个协议的类,必须要实现这个方法,否则编译器会发出警告,仅仅是发出警告而已

例如,我这儿有1个Person类

#import <Foundation/Foundation.h>

#import “SportProtocol.h”

@interface Person:NSObject < SportProtocol >

//code;

@end

这时候,Person类是不是遵守了这个SportProtocol协议啊,如果我不去实现协议中的方法,编译器会给一个大大的警告

能不能编译通过啊,可以,能不能运行啊,可以

2.在协议当中,如果方法的声明被@optional修饰,那么遵守这个协议的类可以实现这个方法,也可以不实现这个方法,不实现编译器也不会报警告

3.其实,无论是@required还是@optional,你都可以不实现,编译器不会报错,仍然可以编译、运行

唯一的区别就是:当遵守协议的类不实现协议中的方法的时候,@required会给1个警告,@optional不会给警告

这两个关键字的主要作用:在于程序员之间的沟通,告诉遵守协议的类,哪些方法是必须要实现的,因为这些方法我会调用,默认的是@required

猜你喜欢

转载自blog.csdn.net/madoca/article/details/127018661