A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有一个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;
}
电脑上没有装黑苹果,所以不知道程序能不能正常运行,请装了的朋友帮忙运行一下,看程序有没有错误,谢谢!

6 个回复

倒序浏览
手动内存管理的话 atutorelease也不用吧 ?
还有dealloc方法 最后是[super dealloc] 老师是这么讲的
回复 使用道具 举报
talent123 发表于 2015-6-6 11:35
手动内存管理的话 atutorelease也不用吧 ?
还有dealloc方法 最后是[super dealloc] 老师是这么讲的 ...

在autoreleasepool中进行手动释放,是没有问题的,dealloc方法里面是我写错了,应该是[super dealloc],谢谢,你电脑上有Xcode吗,能帮忙运行一下吗
回复 使用道具 举报
welfarezhang 发表于 2015-6-6 11:46
在autoreleasepool中进行手动释放,是没有问题的,dealloc方法里面是我写错了,应该是[super dealloc],谢 ...

我黑苹果还没弄好
另外看到一个不太确定的地方
就是import"lookAfterBaby"少个.h吧?
回复 使用道具 举报
talent123 发表于 2015-6-6 11:48
我黑苹果还没弄好
另外看到一个不太确定的地方
就是import"lookAfterBaby"少个.h吧? ...

是的呢,谢谢
回复 使用道具 举报

你自己盲写的吗?
盲写的还算不错了
回复 使用道具 举报
talent123 发表于 2015-6-6 13:05
你自己盲写的吗?
盲写的还算不错了

额。。。。谢谢?  {:3_69:} 算是半盲打吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马