2015.7.30 第五堂(补)delegate 三部曲理解之一(不使用代理)
2015-08-06 01:13
656 查看
// // Person.m // Delegate-租房-不适用代理 // // Created by Baocloud-iMac8 on 15/7/30. // Copyright (c) 2015年 宝擎教育. All rights reserved. // #import "Person.h" #import "Agency.h" @implementation Person - (void)needOneHouse{ //找到一个中介 小王 Agency *xiaoWang = [[Agency alloc] init]; //告诉小王是我让你做的(当程序运行起来之后才能确定我是谁) xiaoWang.man = self; //租房 [xiaoWang rentHouse:self.name des:@"我要高大上的房子"]; }
xiaoWang.man = self; 当前类Person赋值给xiaowang的man属性/对象,告诉小王是“我"让你做的
[xiaoWang rentHouse:self.name des:@"高大上"]; 把当前类的name属性和所需房屋描述作为参数传递给rentHouse函数,好让中介来进行实际的租房操作
至此,needOneHouse发起了租屋的整个事件,并通过rentHouse传参和self达到了往agency那边传递信息的功能。
// // Agency.m // Delegate-租房-不适用代理 // // Created by Baocloud-iMac8 on 15/7/30. // Copyright (c) 2015年 宝擎教育. All rights reserved. // #import "Agency.h" @implementation Agency - (void)rentHouse:(NSString *)name des:(NSString *)des{ //模拟租房的过程 NSLog(@"尊敬的主人:%@ 滴滴一下 马上出发",name); NSLog(@"主人,您的房源找到了:%@", des); //将租到的信息反馈给调用者 if ([self.man respondsToSelector:@selector(callTelephone:)]) { [self.man callTelephone:@"中介说:那是灯壁辉煌的一个房子"]; }小王NSLog表示实际租房过程(略),判断当前类self(agency)的man属性(之前已经调过来是person了)是否实现了往回传的callTelephone方法,如果是,用该方法将中介租到的信息(results)反馈给调用者。
Person.m中的callTelephone方法:
- (void)callTelephone:(NSString *)resluts{ NSLog(@"我接收到你的描述是%@,辛苦了小王这房子我要了", resluts); }以及要定义 中介的man属性来接受信息,要定义租房者的name属性来传递信息。代码略。
最后在main函数中,调用needOnehouse这个发起租房的总事件。
Person *jack = [[Person alloc] init]; jack.name = @"Jack"; [jack needOneHouse];
同理完成其他两项,最终结果为:
但三部曲之一存在明显的两个缺点:
1.代码没有扩展性,每添加一个租房者,在中介那需要增添一个对象记录man superman jiwawa;(我觉得声明name也要各个声明很麻烦)
2.作为中介,无法对租房者进行统一管理(不知道对方有什么方式可以接收中介要反馈的信息)。
http://pan.baidu.com/s/1pJKd1Bt链接在此
完整版代码由于较长,见压缩文件。
相关文章推荐
- ggplot2——图例篇
- JDBC回顾
- ggplot2——图例篇
- [LeetCode] Summary Ranges
- Zookeeper的web管理系统
- 用200行Python代码“换脸”
- 黑马程序员——Java基础---GUI
- intent的startActivityForResult()方法
- 用200行Python代码“换脸”
- No module named cv2
- No module named cv2
- 2015.8.5 循环与函数、位运算
- 黑马程序员——ios学习笔记 C语言 指针的应用
- 在linux系统中怎样用rsyslog来配置一个syslog服务器
- 【移动端debug-1】css3中box-shadow的溢出问题
- Swift 与 Object-C 项目混搭桥接文件的配置小记
- 最小编辑代价(动态规划)
- 黑马程序员——Java基础---IO
- Hibernate之Annotation(注解的方式,非映射)
- Exchange Cards(dfs)