我的代理类的内部调用不会通过代理进行路由

时间:2013-08-18 04:27:16

标签: objective-c objective-c-runtime nsproxy

我正在使用方法调配将所有方法调用包装在一个具有一些额外功能的类中。具体来说我是:

  • 检查此方法调用所需的对象是否在缓存中
  • 如果缓存有该对象返回它。
  • 如果没有,请调度到原始实现,填充缓存并返回该缓存。

我想看看使用NSProxy是否提供了更具可读性的代码,另外认为NSProxy可以轻松地使用未知数量的参数重定向方法调用。

因此,除了一个重要的捕获之外,NSProxy版本工作正常。我的子类上的任何内部调用都不通过代理。

以下是我创建替身拦截器的方法:

- (id)init
{
    self = [super init];
    if (self)
    {
        TyphoonAssemblyProxy* proxy = [[TyphoonAssemblyProxy alloc] initWithAssembly:self];
        self = proxy; // 'self' should now be the proxy. . . but it seems not :(
    }
    return self;
}

内部调用(即在代理类中调用'self')不会通过代理路由:

现在,在我的代理类的子类中,我有代码希望内部调用通过代理。但他们没有。

- (id)knight
{
    return [TyphoonDefinition withClass:[Knight class] properties:^(TyphoonDefinition* definition)
    {
        //THIS NEXT CALL TO [self defaultQuest] SHOULD GO THROUGH PROXY MACHINERY!
        [definition injectProperty:@selector(quest) withDefinition:[self defaultQuest]]; 
        [definition injectProperty:@selector(damselsRescued) withValueAsText:@"12"];
        [definition setScope:TyphoonScopeDefault];
    }];
}

问题:

通过代理获取这些内部的简单方法是什么?

1 个答案:

答案 0 :(得分:1)