IOS开发(6)基础-协议(protocol)

协议的理解

IOS中的协议使用类似java中接口,是定义一系列的约定。举个例子,我们找IOS开发工作,而招聘IOS开发公司,针对这个职位进行以下规定:

  1. 必须本科毕业
  2. 熟练掌握OC开发语言
  3. 2年以上开发经验
  4. 具体其他编程语言优先
  5. 。。。

上面几天是照片公司针对IOS开发职位进行约定,招聘公司安装约定内容招聘合适的开发人员,而我们如果想去这家公司工作,那么首先必须具体这家公司职位的条件吧,当然上面第4点,是个可选的,即使我们不会其他语言开发也不会影响我们IOS软件开发。

IOS中的协议在上个例子中就是我们和招聘公司的要遵守协议,或者说是等等。在IOS编程语言中,iOS里面协议不是类,它是一种约定,是定义一系列的方法,提供给类进行实现。在开发中,默认情况在协议中声明的方法,类遵守了该协议,就必须实现协议中所有声明的方法,否则编译器提示警告。IOS的协议是比较人性话的,我们可以通过@optional或者@required来标识哪些是可选的哪些是类必须要实现的。
IOS中的协议在开发中通常用于代理设计模式。

如何定义一个协议

#import <Foundation/Foundation.h>
//定义一个协议名称为MyProtocol
@protocol MyProtocol <NSObject>

//定义协议方法,下面定义一个协议方法声明跑的方法
-(void) run;

@end

说明:
- @protocol 定义协议使用的关键字
- MyProtocol 协议的名称,我们根据开发规范自己定义的
- 基协议,所有的协议都继承一个基协议NSObject
- run 协议中方法的声明
- @end 结束协议定义

类如何遵守协议

#import <UIKit/UIKit.h>
#import "MyProtocol.h" //导入协议头文件
@interface ViewController : UIViewController <MyProtocol> //<MyProtocol> 表示该类遵守这个协议

@end

上示例代码表示类遵守了MyProtocol协议,我们打开ViewController实现文件,编译器提示警告。我们需要实现协议的方法后,警告消除。

未遵守协议的实现类警告通知

一个类可以遵守多个协议的,多个协议使用逗号隔开

#import <UIKit/UIKit.h>
#import "MyProtocol.h"
#import "MyTwoProtocol.h"
@interface ViewController : UIViewController <MyProtocol,MyTwoProtocol>

@end

协议的继承

协议是有继承关系的,我们定义的协议都继承,当然我们定义的协议也可以继承我们自定义的协议。

#import <Foundation/Foundation.h>
#import "MyTwoProtocol.h"
//定义一个协议名称为MyProtocol
@protocol MyProtocol <NSObject,MyTwoProtocol>

//定义协议方法,下面定义一个协议方法声明跑的方法
-(void) run;

@end

协议中@required和@optional

#import <Foundation/Foundation.h>
#import "MyTwoProtocol.h"
//定义一个协议名称为MyProtocol
@protocol MyProtocol <NSObject,MyTwoProtocol>

@required // 表示类遵守协议必须要实现
-(void) run;

@optional // 表示类遵守协议可实现可不实现
-(void) eat;

@end

避免不遵守协议的风险
通过上面的介绍,类遵守了协议,但是类即使不实现,编译器只是警告,这样就会照成逻辑风险,IOS设计协议也考虑到了这一点,提供方法来检测类是否实现了方法,用来规避这个风险

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        int result = [NSString respondsToSelector:@selector(stringWithFormat:)];
        NSLog(@"%d", result);
    }
    return 0;
}

我们可以通过respondsToSelector 方法来判断遵守协议的类是否实现协议。在代理设计模式下,用于判断代理对象是否实现某个协议方法大致写法如下:

if([self.delegate respondsToSelector:@selector(sel)]){

[self.delegate sel];
)

协议类型限制

给id类型添加协议限制,表示id类型只能是遵守协议的类型

id<MyOneProtocol> obj = persion

类遵添加协议限制

Persion<MyOneProtocol> obj = persion

成员类型添加协议限制

@property (nonatomic , strong) Dog<MyOneProtocol> *dog;

协议使用注意事项

  1. 协议中只能定义方法的声明,不允许写方法的实现
  2. 遵守协议的类,子类也会拥有协议方法
  3. 一个类是可以遵守多个协议的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值