------- android培训、java培训、期待与您交流! ----------
什么是协议?
一些方法的声明,一般写到一个.h的头文件中
方法有两种:
1)必须实现
2)选择实现
协议的作用;
供其他的类去遵守,
如果一个类遵守了一个协议,就应该实现这个协议中定义的必须要实现的方法
如何定义一个协议:
@protocol xxx<NSObject>
@end
类遵守协议的格式:
1)遵守一个协议:
先导入头文件
@interface 类名:NSObject<xxx>
@end
2)遵守多个协议
@interface 类名:NSObject<xxx,aaa,bbb>
@end
workProtocol.h文件
#import <Foundation/Foundation.h>
@protocol workProtocol <NSObject>
-(void)work;
@end
baseProtocol.h文件
//定义一个协议
#import <Foundation/Foundation.h>
//基础协议
//eat run
//Person 采纳这个协议
//使用协议的流程:
//定义协议
//让类遵守这个协议
//实现协议中对应
#import "workProtocol.h"
@protocol baseProtocol <NSObject,workProtocol>
//声明一些方法
-(void)eat;
-(void)run;
@end
Person.h文件
#import <Foundation/Foundation.h>
//1.导入头文件
//2.遵守协议
//3.实现方法
#import "baseProtocol.h"
//#import "workProtocol.h"
//当我们遵守了某个协议后,就有了协议中方法的声明
@interface Person : NSObject<baseProtocol>
@end
Person.m文件
#import "Person.h"
@implementation Person
-(void)eat{
NSLog(@"正在吃");
}
-(void)run{
NSLog(@"跑得快");
}
-(void)work{
NSLog(@"努力工作");
}
@end
main.m文件
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [Person new];
[p eat];
[p run];
[p work];
}
return 0;
}
@required和@optional关键字
#import <Foundation/Foundation.h>
@protocol baseProtocol <NSObject>
//@required和@optional都是协议中的关键字
//@required修饰的方法是必须要实现的
//默认情况下都是必须要实现的
@required
-(void)run;
-(void)eat;
//@optional修饰的方法是可以选择实现
@optional
-(void)dajia;
@end
@protocol类型限制
#import <Foundation/Foundation.h>
#import "Girl.h"
#import "Dog.h"
#import "houseHoldProtocol.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Dog *d = [Dog new];
Girl *mm = [Girl new];
//增加类型限制
//第一种类型限制:给id类型增加限制
//id<houseHoldProtocol> obj;
//增加<houseHoldProtocol> 以后,表示,obj只能赋值遵守了这个协议的对象
id <houseHoldProtocol> obj = mm;
//第二种类型限制
//表示,obj2赋值的时候,必须是Girl对象,并其遵守了协议。
Girl<houseHoldProtocol> *obj2 = mm;
//第三种类型限制
obj2.dog = d;
}
return 0;
}
id和instancetype的区别
1)instancetype只能作为函数或方法的返回值
2)id能作为方法或者函数的返回值、参数类型,也能用来定义变量
3)instancetype对比id的好处
能精确的限制返回值的具体类型
protocol代理设置模式概念
代理模式的应用场合
1.监听器的场合
teacher想监听baby 的一些行为
2.通知的场合
baby发生了一些行为,想告知teacher
3.有些事情,自己不能做