Protocol基础知识及应用

本文介绍了Objective-C中的协议基本概念,包括非正式协议的定义与采纳,关键字@required和@optional的使用,以及协议遵守协议的实现。通过实例讲解了代理设计模式的应用,以婴儿和保姆的关系为例,展示了如何创建协议、婴儿类和保姆类,并让保姆类遵循协议以完成特定任务。最后,还探讨了代理模式在找房场景中的应用。
摘要由CSDN通过智能技术生成

1.非正式协议概念
给NSObject或者NSObject的子类增加类别
2. 1)定义协议 (.h文件中)
2)采纳(采用)协议(ClassA.h中,类声明的时候采纳协议)
3)ClassA.m中 实现协议对应的方法

协议定义

@protocol协议名称 <NSObject> //默认遵守NSObject协议

采纳协议
一.类遵守协议(创建类的时候遵守某个或几个协议)

@interface类名:父类<协议名称>
@end

@interface类名:父类<协议名称1,协议名称2>
@end

二、协议遵守协议(一个协议可以遵守其他多个协议)

@protocol 协议名称<其他协议名称>
@end

@protocol 协议名称<其他协议名称1,其他协议名称2>
@end

2.baseProtocol.h中定义协议

#import <Foundation/Foundation.h>
@protocol baseProtocol <NSObject>
- (void)eat; //声明一些方法
- (void)run;
@end

//新建Person.h文件
#import"baseProtocol.h"
#import"workProtocol.h"
// 遵守协议
// 实现方法
// 当我们遵守了某个协议后,就相当于这个类有了协议中所有的 方法的声明
@interface Person:NSObject <baseProtocol,workProtocol>
@end
//Person.m文件
#import"Person.h"
@implement Person
- (void)eat{
}
- (void)run{
}

- (void)work{
} 
@end
// 新建.m文件
#import"Person.h" //导入Person文件
Person *p = [Person new];
[p eat];
[p run];
[p work];  

协议的关键字 @required / @optional

@protocol RunProtocol <NSObject>
// @required 修饰的必须要实现的方法
@required
- (void)run;

// @optional 修饰可以选择实现的方法
@optional
- (void)eat;
@end;
  1. protocol类型限制
    id / instancetype 不同用法

houseHold.h

#import <Foundation/Foundation.h>
@protocol houseHold <NSObject>
@required;  // 可省略
- (void)ZuoFan;
- (void)XiYiFu;
@optional;
- (void)goodJob;
@end;

main.m

#import "houseHold.h"
#import "Dog.h" // Dog类
#import "Girl.h"
Dog *d = [Dog new];
Girl *mm = [Girl new];
NSString *str = @"";
// 增加类型限制
// 第一种类型限制:给id类型增加限制
// id<houseHold> obj;
// 增加<houseHo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值