2

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

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

我想看看使用 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];
    }];
}

问题:

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

4

1 回答 1

1

而不是这样做,也许消息转发对你有用。

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html

于 2014-05-09T11:46:03.553 回答