类遵守一个协议,协议中定义的@required方法可以不完全实现么?

如题,看书得到这样一个结论,协议中定义的方法,如果是@required是必须要实现的方法。
但是我在测试的时候,发现有定义的方法没有实现程序也能跑起来,只是在类的实现代码中有一个警告。
是这样子的么?可是网上和树上写的,如果协议中定义的是@required方法,在类中必须要实现啊!

现在上代码。
1、协议amimal

#import 
@protocol animal
-(void)eat;
-(void)speak;
@optional
-(void)run;
@end

2、类的接口文件person


#import 
#import "animal.h"
@interface person : NSObject 
//-(void)eat; //如果遵守类一个协议,那么在协议中定义的方法,在类对接口文件中不必定义,只需在实现代码中书写实现代码即可
@end

3、类的实现文件peison.m

#import "person.h"

@implementation person
-(void)eat
{
    NSLog(@"eat");
}
@end

4、主函数

#import 
#import "person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        person *myPer = [[person alloc]init];
        [myPer eat];
    }
    return 0;
}

你可能感兴趣的:(类遵守一个协议,协议中定义的@required方法可以不完全实现么?)