iOS开发-Delegate 代理 使用和注意事项

1.设想:设想员工类,员工做什么事情需要给老板进行汇报,所以在员工类Employee中进行设置Delegate来反馈给老板事情进展情况,Employee类具体代码如下:

Employee.h代码如下

//
//  Employee.h
//  Delegate
//
//  Created by rongxun02 on 15/11/16.
//  Copyright © 2015年 DongZe. All rights reserved.
//

#import <Foundation/Foundation.h>
/*
 1.定义代理协议
 2.定义代理方法
 3.定义代理属性
 4.在别的类中实现delegate方法
 */

@protocol EmployeeDelegate <NSObject>

//@property
@required
- (void)taskSuccessful:(NSString *)contents;
- (void)taskFailure:(NSString *)reason;
- (void)tasking:(NSString *)contens;

@end

@interface Employee : NSObject
@property (nonatomic, assign)id<EmployeeDelegate> delegate;
- (void)startTask;
@end

Employee.m代码如下:

//
//  Employee.m
//  Delegate
//
//  Created by rongxun02 on 15/11/16.
//  Copyright © 2015年 DongZe. All rights reserved.
//

#import "Employee.h"
@implementation Employee
- (void)startTask {
    [_delegate taskSuccessful:@"代理执行任务反馈..."];
}
@end

我们让Boss类作为Employ类的代理,Boss.h代码如下:

//
//  Boss.h
//  Delegate
//
//  Created by rongxun02 on 15/11/16.
//  Copyright © 2015年 DongZe. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Employee.h"

@interface Boss : NSObject<EmployeeDelegate>

@property (nonatomic, strong)Employee *employee;

- (void)startTask;

@end
Boss.m代码如下:

//
//  Boss.m
//  Delegate
//
//  Created by rongxun02 on 15/11/16.
//  Copyright © 2015年 DongZe. All rights reserved.
//

#import "Boss.h"
#import "Employee.h"


@implementation Boss

- (void)dealloc {
    _employee.delegate = nil;
}

- (void)startTask {
    self.employee = [[Employee alloc] init];
    _employee.delegate = self;
}

- (void)taskSuccessful:(NSString *)contents {
    NSLog(@"%@", contents);
}
- (void)taskFailure:(NSString *)reason {
    NSLog(@"%@", reason);
}
- (void)tasking:(NSString *)contens {
    NSLog(@"%@", contens);
}

@end
然后我们在ViewController中进行调用,代码如下

self.boss = [[Boss alloc] init];
    [_boss startTask];
    [_boss.employee startTask];

写一个delegate的步骤

  1. 定义代理协议
  2. 定义代理方法
  3. 定义代理属性
  4. 在接受这个代理类中实现这些代理方法,设置为delegate

注意事项:

  • 定义代理方法的时候有两个属性@property,@request ,@property是可选的,@request是必须要写的.默认是@property.
  • 我们在Employee.h中定义代理属性
    @property (nonatomic, assign)id<EmployeeDelegate> delegate;
    一定要用assign,不然会引起循环引用

delegate作用:

  • B页面Push到A页面后,需要在A页面中传值到B页面,我们可以用Delegate,当然我们还可以用通知和Block
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值