美文网首页
(摘抄防丢失)多重代理源码

(摘抄防丢失)多重代理源码

作者: 王道钦 | 来源:发表于2015-12-26 12:59 被阅读65次

关于多重代理源码 粘贴在一个.m里即可,原文及其用法如:原文

@interface MultipleDelegateProxy ()

@property (nonatomic, strong) NSPointerArray *weakRefTargets;

@end

@implementation MultipleDelegateProxy

- (void)setDelegateTargets:(NSArray *)delegateTargets{

self.weakRefTargets = [NSPointerArray weakObjectsPointerArray];

for (id delegate in delegateTargets) {

[self.weakRefTargets addPointer:(__bridge void *)delegate];

}

}

- (BOOL)respondsToSelector:(SEL)aSelector{

if ([super respondsToSelector:aSelector]) {

return YES;

}

for (id target in self.weakRefTargets) {

if ([target respondsToSelector:aSelector]) {

return YES;

}

}

return NO;

}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector{

NSMethodSignature *sig = [super methodSignatureForSelector:aSelector];

if (!sig) {

for (id target in self.weakRefTargets) {

if ((sig = [target methodSignatureForSelector:aSelector])) {

break;

}

}

}

return sig;

}

//转发方法调用给所有delegate

- (void)forwardInvocation:(NSInvocation *)anInvocation{

for (id target in self.weakRefTargets) {

if ([target respondsToSelector:anInvocation.selector]) {

[anInvocation invokeWithTarget:target];

}

}

}

相关文章

  • (摘抄防丢失)多重代理源码

    关于多重代理源码 粘贴在一个.m里即可,原文及其用法如:原文 @interface MultipleDelegat...

  • 动态代理

    动态代理源码分析 动态代理2

  • java随笔(十一)

    java动态代理源码分析,总结。java动态代理实现步骤: 通过阅读源码发现,动态生成代理对象$Proxy0,该对...

  • 2020-07-14

    海外安全 人防 定位 预警 物防 防物品丢失 技防 机密 保密性 传输问题

  • JDK动态代理实现原理:

    JDK动态代理实现原理思路: 1. 声明一段源码,这段源码动态生成我们的动态代理; 2. 把源码生成Java文件;...

  • Spring AOP DefaultAdvisorAutoPro

    Spring AOP源码目录 Spring AOP源码01:Jdk动态代理底层源码Spring AOP源码02:P...

  • 刷新过于频繁之防抖函数的使用

    调用 防抖函数源码

  • # 源码解析:AOP(2)

    接上篇# 源码解析:AOP cglib类代理 使用cglib实现的代理与jdk代理类似,只是代理对象的构造方式不同...

  • 静态AOP

    静态代理 代理分为静态代理和动态代理。静态代理由程序员创建或工具生成代理类的源码,再编译代理类,所谓静态也就是在程...

  • Java 代理的场景与源码分析

    一、代理使用和源码分析 二、常用场景和实现方法 一、使用和源码分析 动态代理步骤: 1.创建目标对象 必须是接口 ...

网友评论

      本文标题:(摘抄防丢失)多重代理源码

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