黑马程序员技术交流社区

标题: 有关代理的一个习题,请大家看一下程序有没有问题 [打印本页]

作者: welfarezhang    时间: 2015-6-6 10:56
标题: 有关代理的一个习题,请大家看一下程序有没有问题
有一个Baby类,有Cry行为(方法,意为“哭”),Baby可以配一个保姆,但是作为保姆,必须遵守保姆协议:能够处理Baby类Cry的行为。请根据以上描述设计一套代理设计模式(Objective-C)
// Baby.h
#import<Foundation/Foundation.h>
#import"LookAfterBaby.h"
@interface Baby: NSObject
- (void)cry;
@property(nonatomic retain) id<LookAfterBaby> delegate;
@end
// Baby.m
@implementation Baby
- (void)cry
{
[_delegate stopCry];
}
- (void)dealloc
{
[_delegate release];
[super release];
}
@end
//protocol.h
@protocol LookAfterBaby <NSObject>
- (void)stopCry;
@end
// Nanny.h
#import<Foundation/Foundation.h>
#import"LookAfterBaby"
@interface Nanny:NSObject <LookAfterBaby>
@end
// Nanny.m
@implementation Nanny
- (void)stopCry
{
NSLog(@"通过保姆代理,照顾Baby,不让Baby哭");
}
// .m
#import<Foundation/Foundation.h>
#import"LookAfterBaby.h"
#import"Nanny.h"
int main()
{
@autoreleasepool{
Baby *b = [[Baby alloc]init];
Nanny *n = [[Nanny alloc]init];
b.delegate = n;
[b cry];

[n release];
[b release];
}
return 0;
}
电脑上没有装黑苹果,所以不知道程序能不能正常运行,请装了的朋友帮忙运行一下,看程序有没有错误,谢谢!


作者: talent123    时间: 2015-6-6 11:35
手动内存管理的话 atutorelease也不用吧 ?
还有dealloc方法 最后是[super dealloc] 老师是这么讲的
作者: welfarezhang    时间: 2015-6-6 11:46
talent123 发表于 2015-6-6 11:35
手动内存管理的话 atutorelease也不用吧 ?
还有dealloc方法 最后是[super dealloc] 老师是这么讲的 ...

在autoreleasepool中进行手动释放,是没有问题的,dealloc方法里面是我写错了,应该是[super dealloc],谢谢,你电脑上有Xcode吗,能帮忙运行一下吗
作者: talent123    时间: 2015-6-6 11:48
welfarezhang 发表于 2015-6-6 11:46
在autoreleasepool中进行手动释放,是没有问题的,dealloc方法里面是我写错了,应该是[super dealloc],谢 ...

我黑苹果还没弄好
另外看到一个不太确定的地方
就是import"lookAfterBaby"少个.h吧?
作者: welfarezhang    时间: 2015-6-6 12:58
talent123 发表于 2015-6-6 11:48
我黑苹果还没弄好
另外看到一个不太确定的地方
就是import"lookAfterBaby"少个.h吧? ...

是的呢,谢谢
作者: talent123    时间: 2015-6-6 13:05
welfarezhang 发表于 2015-6-6 12:58
是的呢,谢谢

你自己盲写的吗?
盲写的还算不错了
作者: welfarezhang    时间: 2015-6-6 13:25
talent123 发表于 2015-6-6 13:05
你自己盲写的吗?
盲写的还算不错了

额。。。。谢谢?  {:3_69:} 算是半盲打吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2