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

iOS 码拜 9年前 (2015-10-10) 1233次浏览
看书得到这样一个结论,协议中定义的方法,如果是@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是可选实现 不实现不会有警告

但如果都强行调用 没实现都会崩


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明类协议中定义的@required方法可以不完全实现么?
喜欢 (0)
[1034331897@qq.com]
分享 (0)