本帖最后由 liii 于 2015-6-24 22:57 编辑
- /** 思路
- 1,需求方
- * 定义协议
- * 设置代理属性
- * 调用代理方法
- 2,代理方
- * 遵守协议
- * 成为代理
- * 实现代理方法
- */
- /** lookAfterBabyProtocol.h
- #import <Foundation/Foundation.h>
- @class Baby; // 用@class 避免 Baby.h 和 lookAfterProtocol.h 文件循环引用
- @protocol lookAfterBabyProtocol <NSObject> // (1-1 定义协议)
- - (void)feedBaby:(Baby *)baby; // 喂小孩
- - (void)hongBaby:(Baby *)baby; // 哄小孩睡觉
- @end
- */
- /** Baby.h
- #import <Foundation/Foundation.h>
- #import "lookAfterBabyProtocol.h"
- #import "BaoMu.h"
- @interface Baby : NSObject
- @property (nonatomic, strong) id <lookAfterBabyProtocol> delegate; // 用于获取保姆对象 (2-2 设置代理属性)
- @property (nonatomic, assign) int bloodValue; // 体力值
- @property (nonatomic, assign) int sleepValue; // 睡眠值
- - (void)eat; // 小孩饿了
- - (void)sleep; // 小孩困了
- @end
- */
- /** Baby.m
- #import "Baby.h"
- @implementation Baby
- - (void)eat{
-
- NSLog(@"eat!!!, bloodValue = %d", self.bloodValue); // 小孩饿了,此时打印他的体力值
- [self.delegate feedBaby:self]; // 当小孩饿了的时候,调用协议方法,让保姆喂小孩 (1-3 调用代理方法)
- }
- - (void)sleep{
- NSLog(@"sleep!!!, sleepValue = %d", self.sleepValue); // 小孩困了,此时打印他的睡眠值
- [self.delegate hongBaby:self]; // 当小孩困了的时候,调用协议方法,让保姆哄小孩睡觉 (1-3 调用代理方法)
- }
- @end
- */
- /** BaoMu.h
- #import <Foundation/Foundation.h>
- #import "lookAfterBabyProtocol.h"
- @interface BaoMu : NSObject <lookAfterBabyProtocol> // (2-1 遵守协议)
- @end
- */
- /** BaoMu.m
- #import "BaoMu.h"
- #import "Baby.h"
- @implementation BaoMu
- - (void)feedBaby:(Baby *)baby{ // (2-2-1 实现代理方法)
-
- baby.bloodValue += 20; // 当喂完小孩后,体力值增加
- NSLog(@"feedBabying, bloodValue = %d", baby.bloodValue); // 打印体力值
-
- }
- - (void)hongBaby:(Baby *)baby{ // (2-2-2 实现代理方法)
- baby.sleepValue +=3; // 当小孩睡着后,睡眠值增加
- NSLog(@"hongsleeping, sleepValue = %d", baby.sleepValue); // 打印睡眠值
- }
- @end
- */
- /** main函数
- #import <Foundation/Foundation.h>
- #import "BaoMu.h"
- #import "Baby.h"
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
-
- BaoMu *mm = [BaoMu new]; // 创建保姆
-
- Baby *bb = [Baby new]; // 创建 baby
- bb.bloodValue = 20; // 初始化体力值
- bb.sleepValue = 3; // 初始化睡眠值
-
- bb.delegate = mm; // 让小孩拥有一个保姆(2-3 成为代理)
-
- [bb eat]; // 小孩饿了
- [bb sleep]; // 小孩困了
-
- }
- return 0;
- }
- */
复制代码
|
|