代理作用之二:代理回调(反向传值)

来源:互联网 发布:装企叁度erp软件 编辑:程序博客网 时间:2024/04/27 20:46
/*
 
 员工工作一个月后,让老板来发工资
 主动方:员工,制定协议:让遵守协议的对象发钱
 被动方:老板,遵守协议,实现协议中的发工资的方法
 
 调用方是遵守协议者,被调用方是制定协议者,制定的协议是让被调用方给调用方传送信息。通知调用方一些事件,或者让调用方做一些事,实现了代理的第二个作用,回调。
 在上一篇博文中讲述的是广播站和收音机的例子。广播站是制定协议的一方也是调用的方,主要是制定协议让被调用方遵守协议去完成一些事,主要是传值。
 
 
 */



代码一:协议

#import <Foundation/Foundation.h>

@protocol SendMoneyDelegate <NSObject>

-(void)sendWage:(int)money;

@end

代码二:工人

#import <Foundation/Foundation.h>
#import "SendMoneyDelegate.h"
@interface JWCWork : NSObject
//此处不能使用retain,只能使用assign,采用弱引用
@property (nonatomic,retain)id <SendMoneyDelegate> delegate;

-(void)tellDelegateSendMoney:(int)money;
-(void)work;

@end



#import "JWCWork.h"

@implementation JWCWork
//通知遵守协议的一方
-(void)tellDelegateSendMoney:(int)money {
    [self.delegate sendWage:money];
}

-(void)work {
    NSLog(@"worker:辛辛苦苦工作一个月,让老板发工资!");
    [self.delegate sendWage:20000];
   }

@end

代码三:


#import <Foundation/Foundation.h>
#import "SendMoneyDelegate.h"
#import "JWCWork.h"

@interface JWCBoss : NSObject<SendMoneyDelegate>{
    
    JWCWork *_worker;//被调用方作为调用方的成员变量,收到被调用方的消息
}
//招聘员工的方法
-(void)recruitWorker;





#import "JWCBoss.h"

@implementation JWCBoss

-(void)sendWage:(int)money{
    NSLog(@"boss:马上发钱!");
    NSLog(@"boss发了%d元钱",money);

}

//这个方法相当于给自己的成员变量赋初值
-(void)recruitWorker{
    
     //主动方往往会创建在被动方的类中
    _worker = [[JWCWork alloc]init];//初始化是主动方
    
     //确定委托关系,设置代理
    _worker.delegate = self;//把调用方设置为代理
    
    [_worker work];//worker调用自己的方法

}
@end


代码四:


主函数;

#import <Foundation/Foundation.h>
#import "JWCBoss.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        JWCBoss *boss = [[JWCBoss alloc]init];
        [boss recruitWorker];
    }
    return 0;
}



结果 :

老板发工资代理的作用之二回调[367:5713] worker:辛辛苦苦工作一个月,让老板发工资
老板发工资代理的作用之二回调[367:5713] boss:马上发钱!
老板发工资代理的作用之二回调[367:5713] boss发了20000元钱

0 0
原创粉丝点击