delegate

一 delegate概念
协议是一种两个类之间的接口定义。定义了协议的类可以看作是将协议定义的方法代理给了实现他们的类。是一种引用方法的类型。一旦为代理分配了方法,代理将与该方法具有完全相同的行为。代理方法的使用可以像其他任何方法一样,具有参数和返回值。简单来说就是传入的对象,代替当前类完成某些功能,就称为代理模式。

二 delegate 使用步骤
1)定义一个协议,在其内部声明要实现的方法
2)定义一个代理类,它要遵守1)中的协议
3)定义一个被代理类,它的成员变量包含一个id类型的变量,并且要遵守1)在的协议
4)在被代理类中通过id变量调用代理类的方法、
5)在使用被代理的文件中,给id 赋值代理类。
三delegate示例

//  main.m
#import <Foundation/Foundation.h>
#import "nurse.h"
#import "baby.h"
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        nurse *nur = [nurse new];
        baby *bab = [baby new];

        bab.delegate = nur;
        [bab baby_crying]; //baby发生行为,然后在内部由nurse类去处理这个行为        
    }
    return 0;
}

下面是一个代理协议

//  lookafter.h

#import <Foundation/Foundation.h>

@protocol lookafter <NSObject>
-(void)lookafterBaby;  //协议声明
@end

下面是要实现代理协议的类

//  nurse.h

#import <Foundation/Foundation.h>
#import "lookafter.h" //引入协议

@interface nurse : NSObject <lookafter>

@end
/************************************/
//  nurse.m

#import "nurse.h"

@implementation nurse
-(void)lookafterBaby  //实现协议
{
    NSLog(@"保姆正在照看婴儿");
}
@end

下面是需要代理协议的类

//  baby.h

#import <Foundation/Foundation.h>
#import "lookafter.h"
@interface baby : NSObject
@property(nonatomic,strong) id<lookafter> delegate;
-(void)baby_crying;  //baby的一个行为方法
@end
/************************************/
//  baby.m

#import "baby.h"
#import "nurse.h"

@implementation baby
-(void)baby_crying
{
    NSLog(@"baby is crying");
    [self.delegate lookafterBaby ];
}
@end

运行结果:
这里写图片描述

示意图如下:
这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俯仰一世_1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值