iOS中的代理设计模式
来源:互联网 发布:arduino 3d打印机源码 编辑:程序博客网 时间:2024/05/21 06:26
二、使用步骤
1>定义一份协议
2>B遵守协议,实现相应的方法
3>A中要定义一个代理属性id<协议>delegate
4>创建B对象,设置A的delegate对象为
相当于在A中一致在调用B中的方法,如果B这个对象为nil的话,就不执行B相应的方法,如果B对象不为空,就会执行B中的方法
程序入口:
#import <Foundation/Foundation.h>
#import "Baby.h"
#import "Dog.h"
int main(int argc,constchar * argv[])
{
@autoreleasepool {// 2.婴儿
Baby *b = [[Babyalloc]init];
b.age = 1;
b.baomu = [[Dogalloc]init];
[b cry];
}
return 0;
}
实体类的声明:
#import <Foundation/Foundation.h>
#import "BabyBaomuXieyi.h"
@interface Baby : NSObject
@property (nonatomic,strong)id<BabyBaomuXieyi> baomu;//任何人都能做保姆,但是要遵守BabyBaomuXieyi
@property (nonatomic,assign)int age;// 年龄
- (void)hungry; //饿了
- (void)cry; // 哭了
- (void)sleep; // 想睡觉
@end
实体类的实现
#import "Baby.h"
@implementation Baby
- (void)cry
{
NSLog(@"%d岁的baby哭了", _age);
// 通知保姆(护士)
[_baomu babyCry:self];
}
- (void)sleep
{
NSLog(@"%d岁的baby想睡觉", _age);
// 通知保姆
[_baomu babySleep:self];
}
- (void)hungry
{
NSLog(@"%d岁的baby想吃东西", _age);
// 通知保姆
[_baomu babyHungry:self];
}
@end
声明协议
#import <Foundation/Foundation.h>
@class Baby;
@protocol BabyBaomuXieyi <NSObject>
- (void)babyCry:(Baby *)baby;
- (void)babySleep:(Baby *)baby;
- (void)babyHungry:(Baby *)baby;
@end
实现代理的实体
#import <Foundation/Foundation.h>
#import "BabyBaomuXieyi.h"
@interface Dog : NSObject <BabyBaomuXieyi>
@end
实现代理相关方法#import "Dog.h"
#import "Baby.h"
@implementation Dog
- (void)babyCry:(Baby *)baby
{
NSLog(@"狗正在安慰%d岁的baby", baby.age);
}
- (void)babyHungry:(Baby *)baby
{
NSLog(@"狗喂%d岁的baby吃东西", baby.age);
}
- (void)babySleep:(Baby *)baby
{
NSLog(@"狗哄%d岁的baby去睡觉", baby.age);
}
@end
经过程序逻辑,我们可以发现,如果Baby想要找baomu,那么这个baomu就必须遵守协议,不然baomu这个对象就不会被赋值,只有遵守协议的baomu,才有照顾baby的资格。在IOS的UI中有许多的Delegate这个玩意儿,他们的总体思路就是在代码里面调用代理对象相关的方法,如果这个代理对象为nil,那么发送的消息就不会被执行,如果我们设置了代理,并且重写相关的方法,那么代理对象就会起作用。
- iOS中的代理设计模式
- iOS开发中的设计模式----代理模式
- iOS 中的设计模式--委托代理
- iOS --代理设计模式
- iOS代理设计模式
- iOS 代理设计模式
- ios代理设计模式
- iOS代理设计模式
- iOS代理设计模式
- iOS代理设计模式
- iOS代理设计模式
- IOS设计模式------代理
- iOS代理设计模式
- iOS 代理设计模式
- iOS 设计模式 - 代理模式
- IOS设计模式代理模式
- 设计模式中的代理模式
- 一篇文章 学会 iOS中的 代理(delegate) 设计模式
- struts2+jquery验证注册用户是否存在
- set容器的实现
- Haproxy配置文件详解
- 六级短对话题技巧
- 《大话设计模式》——读后感 (1)代码无错就是优?——简单工厂模式
- iOS中的代理设计模式
- Android隐藏输入法键盘函数
- UML概述
- 浅议URL normalization
- HDU1166 敌兵布阵 树状数组水题
- 将一个表的数据的某些字段更新到另一个表里面的某些字段
- 数字电路模2运算原理,及模2的加减乘除详解
- 三国告诉我们的30条社会真理!说的太好了!!
- 从为什么要将基类的析构函数定义为虚函数谈起~~