//
// main.m
// delegateMacTest
//
// Created by chenqy on 16/11/21.
// Copyright © 2016年 chenqy. All rights reserved.
//
#import <Foundation/Foundation.h>
#pragma mark 代理协议申明
@class Baby;
@protocol BabyDelegate <NSObject>
- (void)babyWantEat:(Baby *)baby;
- (void)babyWantSleep:(Baby *)baby;
@end
#pragma mark 婴儿类申明
@interface Baby : NSObject
@property (nonatomic, assign) int food;
@property (nonatomic, assign) int sleep;
@property (nonatomic, strong) id<BabyDelegate> delegate;
- (void)wantEat;
- (void)wantSleep;
@end
#pragma mark 婴儿类实现
@implementation Baby
- (void)wantEat {
NSLog(@"婴儿想吃东西");
[self.delegate babyWantEat:self];// 通知保姆喂婴儿
}
- (void)wantSleep {
NSLog(@"婴儿想睡觉");
[self.delegate babyWantSleep:self];// 通知保姆哄婴儿睡觉
}
@end
#pragma mark 保姆类的代理协议申明
@protocol BabyDelegate;
@interface Nurse : NSObject <BabyDelegate>
@end
#pragma mark 保姆类的代理协议实现
@implementation Nurse
- (void)babyWantEat:(Baby *)baby {
baby.food += 10;
NSLog(@"保姆喂婴儿吃东西--现在的食量是%d", baby.food);
}
- (void)babyWantSleep:(Baby *)baby{
baby.sleep += 10;
NSLog(@"保姆哄婴儿睡觉--现在的睡意是%d", baby.sleep);
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"delegate test!");
Baby *baby = [Baby new];
Nurse *nurse = [Nurse new];
baby.delegate = nurse; //婴儿的照料委托给保姆
[baby wantEat];
[baby wantSleep];
[baby wantSleep];
}
return 0;
}
运行结果:
2016-11-21 22:54:08.465 delegateMacTest[911:16705] delegate test!
2016-11-21 22:54:08.468 delegateMacTest[911:16705] 婴儿想吃东西
2016-11-21 22:54:08.468 delegateMacTest[911:16705] 保姆喂婴儿吃东西--现在的食量是10
2016-11-21 22:54:08.469 delegateMacTest[911:16705] 婴儿想睡觉
2016-11-21 22:54:08.469 delegateMacTest[911:16705] 保姆哄婴儿睡觉--现在的睡意是10
2016-11-21 22:54:08.469 delegateMacTest[911:16705] 婴儿想睡觉
2016-11-21 22:54:08.469 delegateMacTest[911:16705] 保姆哄婴儿睡觉--现在的睡意是20
Program ended with exit code: 0