代理设计模式:其实就是自己的事让其他类去完成。还可用于传值。
下面就以保姆照看baby的例子解析代理的基本用法。
首先创建以讴歌baby类
//
// Baby.h
// 代理设计模式
//
// Created by dev on 16/3/8.
// Copyright © 2016年 SWALLE. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol BabyDelegate<NSObject>
-(void)drinkWater;
-(void)eatFood;
@end
@interface Baby : NSObject
/**
* 代理为遵守协议的任何对象
*/
@property(nonatomic ,strong)id<BabyDelegate>delegate;
-(void)babyHundry;
-(void)babyWantDrinkWeater;
@end
//
// Baby.m
// 代理设计模式
//
// Created by dev on 16/3/8.
// Copyright © 2016年 SWALLE. All rights reserved.
//
#import "Baby.h"
@implementation Baby
-(void)babyHundry{
NSLog(@"我饿了");
[self.delegate eatFood];//找代理
}
-(void)babyWantDrinkWeater{
NSLog(@"我渴了");
[self.delegate drinkWater];//找代理
}
@end
创建一个保姆类作为婴儿的代理
//
// ChidrenNurse.h
// 代理设计模式
//
// Created by dev on 16/3/8.
// Copyright © 2016年 SWALLE. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Baby.h"
@interface ChidrenNurse : NSObject<BabyDelegate>
@end
实现文件里面实现协议方法
//
// ChidrenNurse.m
// 代理设计模式
//
// Created by dev on 16/3/8.
// Copyright © 2016年 SWALLE. All rights reserved.
//
#import "ChidrenNurse.h"
@implementation ChidrenNurse
<pre name="code" class="objc" style="color: rgb(76, 191, 87); font-size: 24px;">//实现协议方法
-(void)drinkWater{ NSLog(@"喂baby喝水");}
-(void)eatFood{
NSLog(@"喂宝宝吃饭");
}
@end
让后看ViewController
//
// ViewController.m
// 代理设计模式
//
// Created by dev on 16/3/8.
// Copyright © 2016年 SWALLE. All rights reserved.
//
#import "ViewController.h"
#import "Baby.h"
#import "ChidrenNurse.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Baby *baby = [[Baby alloc] init];
ChidrenNurse *nurse = [[ChidrenNurse alloc] init];
//设置baby的代理为nurse
baby.delegate = nurse;
[baby babyHundry];
[baby babyWantDrinkWeater];
}
@end