美文网首页
Objective-C:代理(Delegate)

Objective-C:代理(Delegate)

作者: 打碟的DJ | 来源:发表于2020-03-23 22:55 被阅读0次

什么是代理(Delegate)

  • 是一种软件设计模式
  • iOS中以@protocol实现
  • 一对一

工作流程

代理工作流程.png

首先明确委托方、代理方和协议的概念:
委托方:公司
代理方:员工
协议:合同

委托方会要求代理需要实现那些内容,然后代理方按照协议实现方法

// 协议
@protocol YKOrderFilterViewDelegate <NSObject>

@optional
/**
 * 查询订单
 * @param sender
 * @by Si
 */
- (void)orderFilterViewSearchBtnAction:(UIButton *)sender textFiled:(UITextField *)textFiled;
/**
 * 选择地址
 * @param textFiled
 * @by Si
 */
- (void)orderFilterViewTextFieldShouldReturn:(UITextField *)textFiled;

@end

// 委托方
@interface YKOrderFilterView : UIView

@property (nonatomic,weak) id<YKOrderFilterViewDelegate> delegate;

@end


@implementation YKOrderFilterView

- (void)searchBtnAction:(UIButton *)sender{
    if (self.delegate && [self.delegate respondsToSelector:@selector(orderFilterViewSearchBtnAction:textFiled:)]) {
        [self.delegate orderFilterViewSearchBtnAction:sender textFiled:self.searchTextField];
    }
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    if (self.delegate && [self.delegate respondsToSelector:@selector(orderFilterViewTextFieldShouldReturn:)]) {
        [self.delegate orderFilterViewTextFieldShouldReturn:textField];
    }
    return YES;
}
@end

// 代理方
@implementation YKOrderManagerViewController
#pragma mark -- YKOrderFilterViewDelegate
- (void)orderFilterViewTextFieldShouldReturn:(UITextField *)textFiled {
    self.searchTextField = textFiled;
    [self.tableView.mj_header beginRefreshing];
    [self.view endEditing:YES];
}

- (void)orderFilterViewSearchBtnAction:(UIButton *)sender textFiled:(UITextField *)textFiled {
    self.searchTextField = textFiled;
    [self searchBtnAction:sender];
}
@end

一般申明为weak来规避循环引用

image.png

一般在代理方都会强引用委托方,而代理再用strong时,会使代理方和委托方相互引用,最后导致谁都不能释放。而weak、assign为弱引用。使用weak时,当对象释放时,weak会自动将指针指向nil,在iOS中向nil发送消息是不会崩溃的。而assign不会,会出现野指针现象。

相关文章

  • Objective-C:代理(Delegate)

    什么是代理(Delegate) 是一种软件设计模式 iOS中以@protocol实现 一对一 工作流程 首先明确委...

  • iOS 逆向传值

    代理(delegate)、通知(NSNotification),block等等。 1、委托代理delegate只能...

  • Swift 泛型函数的一个特定的简单场景使用

    在Objective-C常用id<**Delegate>来应用一些定义的代理协议类,在业务逻辑处理的类中采用注册类...

  • C#学习笔记(1)-Delegates、Lambdas和Even

    1.Delegates ①首先Delegate无法在Objective-C找到对应概念。②Delegate首先是一...

  • iOS开发常见问题集之Delegate

    0 关键词 代理模式、delegate 1 概述 Delegate是Cocoa的精髓之一,Delegate在Coc...

  • Delegate代理

    我理解的代理就是我想做一件事,但是这件事在我的管理范围外,那我就拜托能管理操作这件事的人来做。 比如,自定义一个c...

  • Delegate 代理

    什么是代理? 代理类似于生活中的中介机构,当某人有一个租房买房等需求时,某人找到中介,告诉中介自己的身份和联系方式...

  • 代理 delegate

    代理定义 代理可以声明属性 方法 代理方内 有必须实现的方法 也有选择实现的方法 使用代理时可能出现的问题 通常代...

  • 代理(delegate)

    代理模式是一种消息传递方式,一个完整的代理模式包括:委托对象、代理对象和协议。协议:用来指定代理双方可以做什么,必...

  • UIScrollView

    常见属性: 其他属性: UIScrollView代理(delegate) 当用户开始拖拽,调用delegate的s...

网友评论

      本文标题:Objective-C:代理(Delegate)

      本文链接:https://www.haomeiwen.com/subject/hpcuvctx.html