黑马程序员 oc随记 协议与代理模式
来源:互联网 发布:三次元绅士软件 编辑:程序博客网 时间:2024/05/28 15:23
------- android培训、java培训、ios培训、期待与您交流! ----------
一.协议(protocol)
协议的定义
@protocol 协议名称
//方法声明列表
@end;
在默认的情况下,只要是协议里声明过的方法,遵守此协议的类 就必须要要实现协议里声明的所有的方法,否则系统就会发出警告。一个类可以同时遵守多个协议,而在OC中类的继承只能是单一继承。 前面说道在默认的情况下需要类要实现协议里的全部方法,OC中提供了两个关键字 @required和@optional
二.代理模式
严格来说,代理模式并不是一种特殊的代码,而是由协议引申而来的一种设计模式,例:由一个婴儿,她本身不会自己照顾自己吃饭睡觉,需要有人喂食有人哄她睡觉,此时,她的父母为了满足婴儿的需求请了一个保姆,保姆与婴儿之中存在协议,协议需要一个会照顾小孩吃饭睡觉的保姆,若不符合,婴儿的父母就会将她辞退,这时,符合协议内容的保姆便是婴儿的代理人。
由此,结合协议与代理模式写一串代码:
#import <Foundation/Foundation.h>
#import "baby.h"
int main(int argc,const char * argv[]) {
@autoreleasepool {
baby * b=[babynew];
baomu * bao=[baomunew];
b.baomu=bao; //定义一个保姆与保姆并使保姆成为这个婴儿的代理人,注意,当保姆不符合协议时会发出黄色警告。
NSLog(@"睡眠值:%d",b.sleepzhi);
NSLog(@"体力值:%d",b.tilizhi);
[b wangtosleep]; //当婴儿需要吃饭睡觉时,便由保姆执行另一段方法。
[bwanttoeat];
}
return 0;
}
#import <Foundation/Foundation.h>
@protocol take_care_about_the_baby <NSObject> //这就是协议,其中规定了保姆类需要有喂食和哄小孩睡觉两个方法,一旦保姆类不存在着两个方法便会报错
-(void)feedBabyEat;
-(void)takeBabySleep;
@end
#import <Foundation/Foundation.h>
#import "baomu.h"
@interface baby : NSObject
@property (nonatomic,strong)baomu *baomu;
@property(nonatomic,assign)int tilizhi;
@property(nonatomic,assign)int sleepzhi;
-(void)wanttoeat;
-(void)wangtosleep;
@end
#import "baby.h"
@implementation baby
-(instancetype)init{
if (self=[superinit]) {
_sleepzhi=100;
_tilizhi=100;
}
return self;
}
-(void)wanttoeat{ //宝宝的两个方法,当需要吃饭睡觉时,让保姆执行相应的方法
[_baomufeedBabyEat];
_tilizhi+=10;
NSLog(@"体力值:%d",_tilizhi);
}
-(void)wangtosleep{
[_baomutakeBabySleep];
_sleepzhi+=10;
NSLog(@"睡眠值:%d",_sleepzhi);
}
@end
#import <Foundation/Foundation.h>
#import "take care about the baby.h"
@interface baomu :NSObject <take_care_about_the_baby> //将协议写入.h文件中,注意,协议中拥有的方法不需要类进行再次声明便可使用,但默认情况下必须使用,除非使用@optional使得方法可选
@end
#import "baomu.h"
@implementation baomu
-(void)feedBabyEat{
NSLog(@"宝宝饿了,保姆喂他喝了点奶水");
}
-(void)takeBabySleep{
NSLog(@"宝宝累了,保姆哄他睡觉");
}
@end
- 黑马程序员 oc随记 协议与代理模式
- 黑马程序员--OC-协议与代理设计
- 黑马程序员_ 利用oc的协议实现代理模式
- 黑马程序员 oc随记 @proprety与@synthesize
- 黑马程序员——OC基础—-----协议与代理
- 黑马程序员-OC学习笔记-----协议、代理
- 黑马程序员---oc 协议和代理
- 黑马程序员 --- OC中的协议代理
- [黑马程序员][OC]代理设计模式
- 黑马程序员---OC Prorocol代理模式
- 黑马程序员 oc随记 类方法与对象方法
- 黑马程序员 oc随记 NSNumber、NSValue与NSDate
- 黑马程序员---OC学习笔记之利用协议实现代理模式
- 黑马程序员 _10 OC基础 block 协议 代理
- [黑马程序员][OC]协议
- 黑马程序员——入学Blog05----OC的protocol与代理模式
- OC 协议与代理
- 黑马程序员——OC语言之代理模式
- Linux权限
- 8月7日总结
- 浅析 Linux 中的时间编程和实现原理,第 2 部分: 硬件和 GLibC 库的细节
- oc学习经验
- VC通过窗口句柄获取应用程序路径
- 黑马程序员 oc随记 协议与代理模式
- LeetCode(187)Repeated DNA Sequences
- java堆栈迷宫算法
- Linux下SSH命令使用方法详解
- 安装python第三方库:xlwt及出错ImportError: No module named setuptools的解决方法
- hive-- 请不要用动态分区(如果分区可以确定)
- MyEclipse上整合spring,mybatis报错
- 问题
- JavaWeb-EL表达式