黑马程序员 protocol协议基本知识
2016-01-26 10:56
645 查看
protocel协议概念及作用:声明一些必须实现和选择实现的方法
使用流程:
1.定义只生成一个.h文件
@protocol base <NSObject>
@end
2.采纳
类采纳协议
@interface Person : NSObject<base>
@end
3.实现协议中的方法
在类的.m中实现协议声明的方法
所有的协议都是采纳nsobject
一个协议可以采纳另一个协议
类和协议可以采纳多个协议<协议1,协议2,协议3...>
protocol使用注意:仅用来声明方法,谁采纳谁实现方法
只要父类遵守了协议,子类也遵守
oc不能继承多个类,但是能遵守多个协议(单继承,多采纳)
@protocol的两个关键字
@required 必须实现
@optional 选择实现
protocol代理设计模式:传入的对象代替当前类完成了某个功能,称为代理模式:
1.定义协议,声明方法
2.创建代理类,遵守上面的代理协议
3.在需要代理的类中,定义一个对象,类型为id且遵守代理协议的
4.在代理类中调用对象,调用代理类的方法
5.在main.m中实现
#import <Foundation/Foundation.h>
#import "agreement.h"
#import "Baby.h"
#import "Nanny.h"
#import "PlayWithBaby.h"
int main(int argc,
const
char * argv[]) {
@autoreleasepool {
Baby *baby=[Babynew];
Nanny *nany=[Nannynew];
baby.houseMaid=nany;
[baby eat];
[baby play];
}
return0;
}
#import <Foundation/Foundation.h>
#import "agreement.h"//导入协议
#import "PlayWithBaby.h"
@interface Baby : NSObject
@property(nonatomic,strong)id<agreement,PlayWithBaby>
houseMaid;//婴儿中有个保姆的属性
-(void)eat;//婴儿自己的行为
-(void)play;
@end
#import "Baby.h"
@implementation Baby
-(void)eat{
NSLog(@"I'm a baby,and i'm hungry!");
[self.houseMaidfeedBaby];//调用保姆照料的方法
}
-(void)play{
NSLog(@"I want to play");
[self.houseMaidPlayWithBaby];
}
@end
#import <Foundation/Foundation.h>
#import "agreement.h"
#import "PlayWithBaby.h"
@interface Nanny :
NSObject<agreement,PlayWithBaby>//照料小孩者应采纳协议,即遵守协议,可以采纳多个协议
@end
#import "Nanny.h"
@implementation Nanny
-(void)feedBaby{
NSLog(@"I'm a domestic help,and i can take care of baby professionally!Yes,i'm feeding");//在保姆的.m文件中实现方法
}
-(void)PlayWithBaby{
NSLog(@"Baby have finished ,i'm playing with him");
}
@end
#import <Foundation/Foundation.h>
@protocol agreement <NSObject>
-(void)feedBaby;//在协议中声明方法,相当于合同中的条款
@end
#import <Foundation/Foundation.h>
#import "agreement.h"
@protocol PlayWithBaby <agreement>//一个协议可以采纳另一个协议
-(void)PlayWithBaby;
@end
本程序采用多文件开发而写,所以就按顺序一个一个复制过来了,欢迎大家批评指正
使用流程:
1.定义只生成一个.h文件
@protocol base <NSObject>
@end
2.采纳
类采纳协议
@interface Person : NSObject<base>
@end
3.实现协议中的方法
在类的.m中实现协议声明的方法
所有的协议都是采纳nsobject
一个协议可以采纳另一个协议
类和协议可以采纳多个协议<协议1,协议2,协议3...>
protocol使用注意:仅用来声明方法,谁采纳谁实现方法
只要父类遵守了协议,子类也遵守
oc不能继承多个类,但是能遵守多个协议(单继承,多采纳)
@protocol的两个关键字
@required 必须实现
@optional 选择实现
protocol代理设计模式:传入的对象代替当前类完成了某个功能,称为代理模式:
1.定义协议,声明方法
2.创建代理类,遵守上面的代理协议
3.在需要代理的类中,定义一个对象,类型为id且遵守代理协议的
4.在代理类中调用对象,调用代理类的方法
5.在main.m中实现
#import <Foundation/Foundation.h>
#import "agreement.h"
#import "Baby.h"
#import "Nanny.h"
#import "PlayWithBaby.h"
int main(int argc,
const
char * argv[]) {
@autoreleasepool {
Baby *baby=[Babynew];
Nanny *nany=[Nannynew];
baby.houseMaid=nany;
[baby eat];
[baby play];
}
return0;
}
#import <Foundation/Foundation.h>
#import "agreement.h"//导入协议
#import "PlayWithBaby.h"
@interface Baby : NSObject
@property(nonatomic,strong)id<agreement,PlayWithBaby>
houseMaid;//婴儿中有个保姆的属性
-(void)eat;//婴儿自己的行为
-(void)play;
@end
#import "Baby.h"
@implementation Baby
-(void)eat{
NSLog(@"I'm a baby,and i'm hungry!");
[self.houseMaidfeedBaby];//调用保姆照料的方法
}
-(void)play{
NSLog(@"I want to play");
[self.houseMaidPlayWithBaby];
}
@end
#import <Foundation/Foundation.h>
#import "agreement.h"
#import "PlayWithBaby.h"
@interface Nanny :
NSObject<agreement,PlayWithBaby>//照料小孩者应采纳协议,即遵守协议,可以采纳多个协议
@end
#import "Nanny.h"
@implementation Nanny
-(void)feedBaby{
NSLog(@"I'm a domestic help,and i can take care of baby professionally!Yes,i'm feeding");//在保姆的.m文件中实现方法
}
-(void)PlayWithBaby{
NSLog(@"Baby have finished ,i'm playing with him");
}
@end
#import <Foundation/Foundation.h>
@protocol agreement <NSObject>
-(void)feedBaby;//在协议中声明方法,相当于合同中的条款
@end
#import <Foundation/Foundation.h>
#import "agreement.h"
@protocol PlayWithBaby <agreement>//一个协议可以采纳另一个协议
-(void)PlayWithBaby;
@end
本程序采用多文件开发而写,所以就按顺序一个一个复制过来了,欢迎大家批评指正
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器