是否可以转发属性?
假设我有一个代理类,它有一个成员,而该成员又有一个名为 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];
}
}