美文网首页
iOS协议委托缓存

iOS协议委托缓存

作者: 涡牛君 | 来源:发表于2019-01-11 14:16 被阅读0次

iOS协议委托模式实现一对一的回调,当频繁执行此操作的话的,可以吧委托对象能否相应某个协议方法这一信息缓存起来,以优化程序效率。

讲方法响应能力缓存起来的最佳途径是使用”位段“数据类型,这是一项C语言特性,但在此处用起来却正合适。我们可以吧结构体中的某个字段所占用的二进制位个数设为特定的值。比如像这样:

struct data {

  unsigned int fieldA : 8;

  unsigned int fieldA : 4;

  unsigned int fieldA : 2;

  unsigned int fieldA : 1;

};

在结构体中,fieldA 位段将占用8个二进制位,于是fieldA 可以表示0 至 255 之间的值,fieldD表示0或1这两个值,我们可以像fieldD这样,把委托对象是否实现了协议中的相关方法这一信息缓存起来。

@interface test(){

struct {

unsigned int didTest : 1;

    }_delegateFlags;

}

这个结构体用来缓存委托对象是否能响应特定的选择子。实现缓存功能的代码可以写在delegate set方法里面:

- (void)setDelegate:(id<test>)delegate {

          _delegate = delegate;

_delegateFlags.didTest = [delegate respondsToSelector:@selector(test:)];

}

这样的话,每次调用delegate的相关方法之前,就不用检测委托对象是否能响应给定的选择子了,而是直接查询结构体的标志:

if(_delegateFlags.didTest){

              [_delegate test];

}

如果要频繁通过数据源协议从数据源中获取多份相互独立的数据,那么这项优化技术极有可能提高程序效率。

摘自 《Effective Objective-C2.0》

相关文章

  • iOS协议委托缓存

    iOS协议委托模式实现一对一的回调,当频繁执行此操作的话的,可以吧委托对象能否相应某个协议方法这一信息缓存起来,以...

  • MVC设计模式:1-代理(delegate)协议

    在iOS开发中,经常使用到代理(委托)协议以及数据源协议,所谓代理(委托)协议,通俗来讲,顾名思义就是委托别人办事...

  • iOS委托理解

    iOS委托 委托是协议(protocol)的一种,就是委托别人去做事情。可以理解成两个对象之间的一种协议,假设a是...

  • iOS 通过委托进行对象间通信时的优化

    实现含有位段的结构体,将委托对象是否能响应相关协议方法的信息缓存其中 在委托协议中,方法一般都是可选的(optio...

  • Delegate - protocol协议及委托代理(Deleg

    参考文档 iOS 用Protocol 给类加共享的属性 iOS开发-Protocol协议及委托代理(Delegat...

  • [学习笔记]_iOS代理基本使用,界面间传值

    参考链接: 你真的了解iOS代理设计模式吗? iOS开发-Protocol协议及委托代理(Delegate)传值 ...

  • iOS -- 委托协议 (13)

    若想令自己缩写的对象具有拷贝功能, 则需要实现 NSCopying 协议, 如果自定义的对象分为可变版本与不可变版...

  • 你真的了解iOS代理设计模式吗

    先上图 协议:制定双方责任(方法或属性) 委托方:按照协议提出需求 代理方:按照协议完成需求,并返回结果 iOS对...

  • Effective Objective-C 2.0(第4章)

    编写高质量iOS与OS X代码的52个有效方法 第4章 协议与分类 23.通过委托与数据源协议进行对象间通信 委托...

  • ios 开发委托模式缓存

    在iOS开发中,经常使用代理模式和数据源模式,对于可选的协议方法一般需要进行以下代码查处某个委托对象是否能相应特定...

网友评论

      本文标题:iOS协议委托缓存

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