2015.7.30 第五堂(补)delegate 三部曲理解之一

2015.7.30 第五堂(补)delegate 三部曲理解之一

//// 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.作为中介,无法对租房者进行统一管理(不知道对方有什么方式可以接收中介要反馈的信息)。

完整版代码由于较长,见压缩文件。

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇2015.8.5 内存管理(上)

我也相信爱可以排除万难;只是,万难之后,又有万难。这是我更相信的。

2015.7.30 第五堂(补)delegate 三部曲理解之一

相关文章:

你感兴趣的文章:

标签云: