可可触摸 - 是否可以转发属性



是否可以转发属性?

假设我有一个代理类,它有一个成员,而该成员又有一个名为 string 的属性。

我希望我的代理类具有相同的属性,也名为 string 。从那里开始,我希望每当我在代理上调用 getter/setter 时,它都会在其类成员上设置/获取值。

我最接近的是实现-forwardingTargetForSelector并在需要时切换目标,但它既不干净也不实用(它发出警告,你不能使用点语法)

您可以将

属性声明为 @dynamic 并实现这两种方法来处理转发 - methodSignatureForSelector:forwardInvocation: 。实施将在下面描述 –

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    if ( alpha && [alpha respondsToSelector:aSelector] ) {
        return [alpha methodSignatureForSelector:aSelector];
    } else {
        return [super methodSignatureForSelector:aSelector];
    }
}
- (void)forwardInvocation:(NSInvocation *)anInvocation {
    if ( alpha && [alpha respondsToSelector:[anInvocation selector]] ) {
        [anInvocation invokeWithTarget:alpha];
    } else {
        [super forwardInvocation:anInvocation];
    }
}

最新更新