美文网首页
iOS-代理优化

iOS-代理优化

作者: 黑酒一 | 来源:发表于2017-06-28 13:40 被阅读0次
  • Objective-C 可以使用 “委托模式”(Delegate pattern)的编程设计模式来实现对象间的通信:定义一套接口,某对象若想接受另一个对象的委托,则需遵从此接口,以便成为其 “委托对象”(delegate)。Objective-C 一般利用 “协议” 机制来实现此模式。
@class EOCNetworkingFetcher;

struct {
    unsigned int didReceiveData : 1;
    unsigned int didFailWirhError : 1;
    unsigned int didUpdateProgressTo : 1;
} _delegateFlags;

@protocol EOCNetworkingFetcherDelegate <NSObject>

@optional
- (void)newworkingFetcher:(EOCNetworkingFetcher *)fetcher
           didRecevieData:(NSData *)data;

@end

@interface EOCNetworkingFetcher : NSObject

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

@end
  • 如果要在委托对象上调用可选方法,那么必须提前使用类型信息查询方法,判断这个委托对象能否响应相关的选择子。
if ([self.delegate respondsToSelector:@selector(newworkingFetcher:didRecevieData:)]) {
    NSData *data;
    [self.delegate newworkingFetcher:self didRecevieData:data];
}
  • 每次调用方法都会判断一次,其实除了第一次检测的结构有用,后续的检测很有可能都是多余的,因为委托对象本身没变,不太可能会一下子不响应,一下子响应的,所以我们这里可以把这个委托对象能否响应某个协议方法记录下来,以优化程序效率。
  • 将方法响应能力缓存起来的最佳途径是使用 “位段”(bitfield)数据类型。我们可以把结构体中某个字段所占用的二进制位个数设为特定的值。
位段,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”( bit field) 。
struct data {
unsigned int filedA : 8;
unsigned int filedB : 4;
unsigned int filedC : 2;
unsigned int filedD : 1;
}
  • filedA 位段占用8个二进制位,filedB 位段占用4个二进制位,filedC 位段占用2个二进制位,filedD位段占用1个二进制位。filedA 就可以表示0至255之间的值,而filedD 则可以表示0或1这两个值。
  • 我们可以像filedD 这样子,创建大小只有1的位段,这样子就可以把Boolean 值塞入这一小块数据里面,这里很适合这样子做。
利用位段就可以清楚的表示delegate 对象是否能响应协议中的方法。
struct {
    unsigned int didReceiveData : 1;
    unsigned int didFailWirhError : 1;
    unsigned int didUpdateProgressTo : 1;
} _delegateFlags;
_delegateFlags.didReceiveData = 1;
if (_delegateFlags.didReceiveData) {
    // yes
    NSData *data;
    [self.delegate newworkingFetcher:self didRecevieData:data];
}else {
    // no
    if ([self.delegate respondsToSelector:@selector(newworkingFetcher:didRecevieData:)]) {

    }
}

相关文章

  • iOS-性能优化深入探究

    iOS-性能优化深入探究 iOS-性能优化深入探究

  • iOS-代理优化

    Objective-C 可以使用 “委托模式”(Delegate pattern)的编程设计模式来实现对象间的通信...

  • iOS-性能优化深入探究

    iOS-性能优化深入探究 上图是几种时间复杂度的关系,性能优化一定程度上是为了降低程序执行效率减低时间复杂度。如下...

  • iOS-优化

    1、用ARC管理内存2、在正确的地方使用 reuseIdentifier3、尽量把views设置为完全不透明4、避...

  • iOS-优化

    一.画面卡顿优化 知识铺垫:cpu执行的阶段1.Layout阶段:UI布局、文本计算2.Display阶段:绘制,...

  • iOS-协议、代理

    上次写了窗口的相关内容,突然觉得很low。low到我自己看到就起鸡皮疙瘩,我想对于但凡对于编程有些了解的人都...

  • iOS-代理模式

    XXXXXX.h@protocol XXXXXXDelegate - (void)sendSt...

  • 待看文章

    内存相关 【基本功】深入剖析Swift性能优化 渲染相关 关于iOS离屏渲染的深入研究 线程相关 iOS-线程安全

  • NGINX优化

    Nginx性能优化实践 1.性能优化概述 2.系统性能优化 3.代理服务优化 4.静态资源优化 4.1 静态资源缓...

  • ios-项目优化(启动优化)

    一.冷启动和热启动 热启动是,APP会恢复之前的状态继续运行,这种就是热启动,我们平时所说的APP在后台的存活时间...

网友评论

      本文标题:iOS-代理优化

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