美文网首页
使用代理时候,要频繁检测委托类是否能响应方法

使用代理时候,要频繁检测委托类是否能响应方法

作者: guoguojianshu | 来源:发表于2019-05-06 08:54 被阅读0次

一般是这样进行检测的

这样检测会每次调用都进行检测,一般只有第一次检测才有,所以可以把第一次的检测结果保存起来,下面就使用c语言的位段数据类型进行保存

   if ([self.delegate respondsToSelector:@selector(testWithController:)]) {
      [self.delegate testWithController:self];
   }

使用位段数据类型

struct{
    unsigned int examp1 : 8; //这个8表示有8个二进制位
    unsigned int examp2 : 4; //这个4表示有4个二进制位
    unsigned int examp3 : 2; //这个2表示有2个二进制位
    unsigned int examp4 : 1; //这个1表示有1个二进制位,有一个二进制位,就是为0 或者1,这个时候就可以表示Boolean这个值了
}_examp;

具体的使用

定义的一个协议
#import <Foundation/Foundation.h>


NS_ASSUME_NONNULL_BEGIN

@protocol XJGTestProtocol <NSObject>

@optional

-(void)testWithController:(UIViewController *)controller;

@end

NS_ASSUME_NONNULL_END


.h
#import <UIKit/UIKit.h>
#import "XJGTestProtocol.h"
NS_ASSUME_NONNULL_BEGIN

@interface SecondViewController : UIViewController
@property (nonatomic,weak)id< XJGTestProtocol >delegate;
@property (nonatomic,copy)NSString * name;
@end

.m
@interface SecondViewController ()
{
    struct {
        unsigned  int testSucceed : 1 ;
        
    }_delegateFlags;
}

//在setter方法中,对delegate属性赋值,并对位段数据中的某一个与方法是否执行的属性进行赋值操作
-(void)setDelegate:(id<XJGTestProtocol>)delegate{
    _delegate = delegate;
    _delegateFlags.testSucceed = [_delegate respondsToSelector:@selector(testWithController:)];
}

//直接取位段数据中的值进行检测,不使用上面方法进行检测了,可以优化代理
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    if (_delegateFlags.testSucceed) {
        [self.delegate testWithController:self];
    }
}
@end


相关文章

  • 使用代理时候,要频繁检测委托类是否能响应方法

    一般是这样进行检测的 这样检测会每次调用都进行检测,一般只有第一次检测才有,所以可以把第一次的检测结果保存起来,下...

  • iOS使用位字段优化委托模式

    通常我们在调用代理方法前,都会对委托对象是否能响应代理方法进行判断,出现以下代码段: if(_delegate &...

  • 优化delegate响应

    正常我们使用delegate都是 使用系统方法 respondsToSelector:来判断是否能够响应代理方法 ...

  • Java设计模式:代理模式

    Java设计模式——代理模式 代理模式主要分为接口,委托类,代理类 接口:规定具体方法委托类:实现接口,完成具体的...

  • 设计模式

    单例模式 1)双重检测 2)枚举实现 代理设计模式 代理类和委托类有相同的接口,一个代理类的的对象与一个委托类的对...

  • Java代理模式

    代理的实现分为: 1.静态代理实现 2.动态代理 委托类和委托对象:委托类是一个类,委托对象是委托类的实例。代理类...

  • 设计模式之代理模式

    代理模式:一个委托类,一个代理类,实现相同的接口,通常是在代理类中有一个委托类的对象,代理类并不会真正的执行方法,...

  • 认识动态代理随笔

    1. 什么是动态代理 静态代理是一般是由委托类和代理类实现同一个接口,代理类使用组合的方式来对委托类进行扩展代理过...

  • 动态代理与静态代理区别

    代理:为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对...

  • Objective-C笔记(四)委托-代理模式

    协议委托代理是OC中类之间的一种通信方式委托代理思想:1、定义协议2、生成委托3、代理方法调用 1、定义协议 对于...

网友评论

      本文标题:使用代理时候,要频繁检测委托类是否能响应方法

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