A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 liii 于 2015-6-24 22:57 编辑
  1. /** 思路
  2.    1,需求方
  3.       * 定义协议
  4.       * 设置代理属性
  5.       * 调用代理方法

  6.    2,代理方
  7.       * 遵守协议
  8.       * 成为代理
  9.       * 实现代理方法

  10. */



  11. /** lookAfterBabyProtocol.h

  12. #import <Foundation/Foundation.h>

  13. @class Baby; // 用@class 避免 Baby.h 和 lookAfterProtocol.h 文件循环引用
  14. @protocol lookAfterBabyProtocol <NSObject> // (1-1 定义协议)

  15. - (void)feedBaby:(Baby *)baby; // 喂小孩
  16. - (void)hongBaby:(Baby *)baby; // 哄小孩睡觉

  17. @end

  18. */

  19. /** Baby.h

  20. #import <Foundation/Foundation.h>
  21. #import "lookAfterBabyProtocol.h"
  22. #import "BaoMu.h"

  23. @interface Baby : NSObject

  24. @property (nonatomic, strong) id <lookAfterBabyProtocol> delegate; // 用于获取保姆对象 (2-2 设置代理属性)

  25. @property (nonatomic, assign) int bloodValue; // 体力值
  26. @property (nonatomic, assign) int sleepValue; // 睡眠值

  27. - (void)eat; // 小孩饿了
  28. - (void)sleep; // 小孩困了

  29. @end

  30. */



  31. /** Baby.m

  32. #import "Baby.h"

  33. @implementation Baby

  34. - (void)eat{
  35.    
  36.     NSLog(@"eat!!!, bloodValue = %d", self.bloodValue); // 小孩饿了,此时打印他的体力值
  37.     [self.delegate feedBaby:self]; // 当小孩饿了的时候,调用协议方法,让保姆喂小孩 (1-3 调用代理方法)
  38. }

  39. - (void)sleep{
  40.     NSLog(@"sleep!!!, sleepValue = %d", self.sleepValue); // 小孩困了,此时打印他的睡眠值
  41.     [self.delegate hongBaby:self]; // 当小孩困了的时候,调用协议方法,让保姆哄小孩睡觉 (1-3 调用代理方法)
  42. }

  43. @end

  44. */



  45. /** BaoMu.h

  46. #import <Foundation/Foundation.h>
  47. #import "lookAfterBabyProtocol.h"

  48. @interface BaoMu : NSObject <lookAfterBabyProtocol> // (2-1 遵守协议)

  49. @end

  50. */


  51. /** BaoMu.m

  52. #import "BaoMu.h"
  53. #import "Baby.h"

  54. @implementation BaoMu

  55. - (void)feedBaby:(Baby *)baby{ // (2-2-1 实现代理方法)
  56.    
  57.     baby.bloodValue += 20; // 当喂完小孩后,体力值增加
  58.     NSLog(@"feedBabying, bloodValue = %d", baby.bloodValue); // 打印体力值
  59.    
  60. }

  61. - (void)hongBaby:(Baby *)baby{ // (2-2-2 实现代理方法)

  62.     baby.sleepValue +=3; // 当小孩睡着后,睡眠值增加
  63.     NSLog(@"hongsleeping, sleepValue = %d", baby.sleepValue); // 打印睡眠值
  64. }

  65. @end

  66. */



  67. /** main函数

  68. #import <Foundation/Foundation.h>
  69. #import "BaoMu.h"
  70. #import "Baby.h"


  71. int main(int argc, const char * argv[]) {
  72.     @autoreleasepool {
  73.         
  74.         BaoMu *mm = [BaoMu new]; // 创建保姆
  75.         
  76.         Baby *bb = [Baby new]; // 创建 baby
  77.         bb.bloodValue = 20; // 初始化体力值
  78.         bb.sleepValue = 3; // 初始化睡眠值
  79.         
  80.         bb.delegate = mm; // 让小孩拥有一个保姆(2-3 成为代理)
  81.         
  82.         [bb eat]; // 小孩饿了
  83.         [bb sleep]; // 小孩困了
  84.         
  85.     }
  86.     return 0;
  87. }



  88. */
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马