代理理解(三)主人与仆人买饭为例

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(可选择的)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值