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;
- 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