美文网首页
ios开发-NSProxy

ios开发-NSProxy

作者: 不写昵称 | 来源:发表于2018-08-28 22:07 被阅读0次

作用:与NSObject属同一个级别,负责将消息转发到真正的target的代理类,实现类似于多继承的功能。

打个比方
你想要买一件二手物品,但是你并不想直接跟卖家接触(直接向target发消息),这时你去找了一个第三方,你告诉这个第三方你要买什么、出多少钱买、什么时候要等(向代理发消息),第三方再去跟卖家接触并把这些信息转告卖家(转发消息给真实的target),最后通过第三方去完成这个交易。
几乎可以模拟任何类, 模拟A类,则可以调用A类的方法,模拟B类,则可以调用B类的方法。如果模拟的类没有对应的方法,执行时就会崩溃

使用
创建NSProxy的子类
.h文件

#import <Foundation/Foundation.h>
@interface HCDNSProxy : NSProxy
//模拟的对象
- (void)transformObject:(NSObject *)object;
@end

.m文件

#import "HCDNSProxy.h"

@implementation HCDNSProxy
{
    NSObject *transformObject;
}

//需要模拟的对象
- (void)transformObject:(NSObject *)object {
    transformObject = object;
}

//执行方法
- (void)forwardInvocation:(NSInvocation *)invocation {
    SEL selector = invocation.selector;
    
    if ([transformObject respondsToSelector:selector]) {
        [invocation invokeWithTarget:transformObject];
    } else {
        [super forwardInvocation:invocation];
    }
}

//查询方法签名
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel {
    
    if ([transformObject respondsToSelector:sel]) {
        return [transformObject methodSignatureForSelector:sel];
    } else {
        return [super  methodSignatureForSelector:sel];
    }
}

调用
    //创建proxy
    HCDNSProxy *proxy = [HCDNSProxy alloc];
    //模拟APPDelegate类
    [proxy transformObject:[UIApplication sharedApplication].delegate];
    //执行APPDelegate类中的方法
    [proxy performSelector:@selector(test)];
    //模拟ViewController类
    [proxy transformObject:self];
    //执行ViewController中的方法
    [proxy performSelector:@selector(doSomething:andLink2:) withObject:@"hello" withObject:@"world"];

相关文章

  • ios开发-NSProxy

    作用:与NSObject属同一个级别,负责将消息转发到真正的target的代理类,实现类似于多继承的功能。 打个比...

  • iOS 中对象的创建过程

    iOS 开发中所有的类都是继承自 NSObject 来的(除了个别的, 比如 NSProxy). 也几乎没有类会去...

  • NSProxy

    NSProxy——少见却神奇的类 - IOS - 伯乐在线

  • iOS NSTimer 的全部应用(三)NSProxy解决循环引

    NSProxy是iOS开发中一个消息转发的基类,它不继承自NSObject。因为这个类不太常用,所以对于很多开发者...

  • weakProxy

    前言 NSProxy是iOS开发中一个消息转发的基类,它不继承自NSObject。因为这个类不太常用,所以对于很多...

  • iOS NSProxy

    NSProxy类在分布式对象架构中是很重要的。由于作用比较特别,NSProxy在Cocoa程序中出现频率很低。 N...

  • iOS -NSProxy

    可以看到,它遵守了 NSObject 协议,并且第一个 Ivar 是一个 isa 指针,因此它完全是可以拿来当一个...

  • iOS | NSProxy

    Objective-C作为一种动态消息型语言,其机制不同于Java ,C#等编译型语言.它将数据类型的确定等工作...

  • iOS:NSProxy

    OC 中一个类只有一个父类,这就是单一继承,但是我们可以用协议和NSProxy实现多继承。 1、 protocol...

  • iOS NSProxy

    NSProxy是一个实现了NSObject协议的根类。 苹果的官方文档是这样描述的:NSProxy 是一个抽象基类...

网友评论

      本文标题:ios开发-NSProxy

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