看书得到这样一个结论,协议中定义的方法,如果是@required是必须要实现的方法。
但是在测试的时候,发现有定义的方法没有实现程序也能跑起来,只是在类的实现代码中有一个警告。
是这样子的么?可是网上和书上写的,如果协议中定义的是@required方法,在类中必须要实现啊!
现在上代码。
1、协议amimal
#import <Foundation/Foundation.h> @protocol animal -(void)eat; -(void)speak; @optional -(void)run; @end
2、类的接口文件person
#import <Foundation/Foundation.h> #import "animal.h" @interface person : NSObject <animal> //-(void)eat; //如果遵守类一个协议,那么在协议中定义的方法,在类对接口文件中不必定义,只需在实现代码中书写实现代码即可 @end
3、类的实现文件peison.m
#import "person.h" @implementation person -(void)eat { NSLog(@"eat"); } @end
4、主函数
#import <Foundation/Foundation.h> #import "person.h" int main(int argc, const char * argv[]) { @autoreleasepool { person *myPer = [[person alloc]init]; [myPer eat]; } return 0; }
解决方案:5分
默认就是@required
标记@required 的方法可以不实现的,不过会有个警告,如果没判断强行调用会蹦…
解决方案:5分
required跟option是为了程序员交流而做的规范,required如果没有实现会出现告警,而option如果是没有实现不会告警,默认是required,仅此而已
解决方案:10分
@require是必须实现 不实现会有警告 (默认)
@optional是可选实现 不实现不会有警告
但如果都强行调用 没实现都会崩