栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【IOS】委托(delegate)和协议(protocol)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【IOS】委托(delegate)和协议(protocol)

iOS的委托模式之前也接触过,总觉得自己理解的不够透彻,使用时磕磕绊绊,今天做一个有关协议和委托模式的总结

协议(protocol)

由于Objective_C的类不支持多继承,而类在实现时很多相似的方法,所以我们把某个类应该实现的一系列方法定义在一个叫协议(Protocol)的特性里面,若某类遵循了此协议(Protocol),就可以实现该协议(Protocol)里包含的方法,但并不一定要全部实现Protocol里声明的方法,其方法的实现一般都是可选的(@optional),若检查@optional的方法是否实现,可以用“respondsToSelector”来判断是否实现。
协议提供了一套编程接口,给调用者实现协议中的方法。其使用与JAVA 的接口类似。

委托模式

最常见的协议用途是实现委托(delegate)模式,委托模式的主旨就是定义一个接口,通过该接口可以实现对象间的通信,也就是说,一个对象想让另一个对象)回传信息,则需遵循此接口,委托给另一个对象,作为委托对象的另一个对象,可以给其委托对象回传信息,一张图解释delegate:
委托模式的使用场景:实现不同页面间的数据交互,可以用在页面跳转,界面传值,跳转页面刷新数据以及监听事件等等,当delegate的事件触发时,delegate才会被调用。
下面以代码片段为例,详细讲解委托模式;
在LDDataItemModel.h文件,分别声明协议和声明属性,在协议里调用updateDatas函数,该函数不存在LDDataItemModel类中,但LDDataItemModel类想使用该函数,只能使用委托的形式,成为代理人。

//
//  LDDataModel.h
//  WeiBo_Demo
//
//  Created by    on 2022/1/6.
//

#import 
@class LDDataItemModel;

NS_ASSUME_NONNULL_BEGIN


@protocol LDDataModelDelegate //协议机制

- (void)updateDatas;

@end


@property (nonatomic, weak  ) id delegate;//委托协议

- (void)requestData;

@end



LDTableViewController.m文件里有updateDatas函数,接收LDDataModel的委托,成为委托方,并签订协议

@interface LDTableViewController () 

委托方指定代理人

- (LDDataModel *)datamodel
{
    if (!_datamodel) {
        _datamodel = [[LDDataModel alloc] init];
        _datamodel.delegate = self;
    }
    return _datamodel;
}
- (void)updateDatas {
    dispatch_async(dispatch_get_main_queue(), ^{
        self.datas = self.datamodel.jsonData;
        [self.tableView reloadData];
    });
}

在 LDDataItemModel.m里调用该函数
[self.delegate updateDatas];
updateDatas函数是在LDTableViewController.m文件中声明实现,也就是LDDataItemMode委托LDTableViewController,调用updateDatas函数,完成参数的回调。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号