iOS 代理对象NSProxy

2020-04-14  本文已影响0人  水中的蓝天

本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。

特殊的NSProxy

@interface NSProxy <NSObject> {
    Class   isa;
}
@interface NSObject <NSObject> {
    Class isa  OBJC_ISA_AVAILABILITY;
}

特殊:

  1. (NSMethodSignature *)methodSignatureForSelector:(SEL)sel方法必须实现
  2. (void)forwardInvocation:(NSInvocation *)invocation必须实现

应用:

+ (instancetype)proxyWithTarget:(id)target
{
    XYHProxy *proxy = [XYHProxy alloc];
    proxy.target = target;
    return proxy;
}

//消息转发到target

//返回方法签名
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    return [self.target methodSignatureForSelector:sel];
}

//内部实现方法调用
- (void)forwardInvocation:(NSInvocation *)invocation
{
    [invocation invokeWithTarget:self.target];
}

上一篇下一篇

猜你喜欢

热点阅读