1 Master.h:
@interface Master : NSObject
<SlaveDelegate>
// 口头承诺
@end
2.Master.m:
@implementation Master
- (void) wantToEat {
NSLog(@"我要吃饭");
Slave *s = [[Slave alloc] init];
[s setDelegate:self];//设置代理:设置s代理self做一些事情其实类似于 s.delegate=self;
[s buyFood];
NSLog(@"仆人你去帮我买饭要吃饭");
}
- (void) didBuyFood {
NSLog(@"饭已经来了");
}
- (float) payMoney {
return 100;
}
- (void) didBuyFoodError:(NSString *)error {
}
@end
3.Slave.h
@protocol SlaveDelegate;
@interface Slave : NSObject {
id <SlaveDelegate> delegate;
}
@property (nonatomic, assign) id <SlaveDelegate> delegate;
- (void) buyFood;
@end
// 仆人定义的规则 协议
@protocol SlaveDelegate <NSObject>
@required
// 必须实现 然后>=100
- (float) payMoney;
@optional
- (void) didBuyFood;
- (void) didBuyFoodError:(NSString *)error;
@end
4.Slave.m
@implementation Slave
@synthesize delegate;
- (void) buyFood {
NSLog(@"仆人去买饭,可是主人你要付钱,因此这里也要用delegate,即告诉主人付钱");
float m = [delegate payMoney];
if (m < 100) {
[delegate didBuyFoodError:@"钱不够"];
return;
}
// ....
[delegate didBuyFood];
NSLog(@"买完了,告诉主人一声");
}
@end;
主人想吃饭(wanttoeat()),就叫仆人去买饭(buyfood()),仆人去买饭(buyfood()具体实现细节),就得主人付钱(paymoney()),仆人买完了要告诉主人(didBuyFood()),主人才可以吃饭(didbuyfood具体实现细节)。
这样通过代理就完成了两个对象之间的通信。记住在这里:明确谁指定规则,谁遵守规则(本题的规则就是:主人你叫我买饭可以,但是钱必须要你来付(paymoney))。当然这里也分两种,一种是require(必须实现的),一种是optional(可选择的)