是否可以转发财产?
假设我有一个代理类,其成员具有一个名为string
的属性。
我希望我的代理类具有名为string
的相同属性。从那里开始,我希望每当我在代理上调用getter / setter时,它就会在其类成员上设置/获取值。
我最接近它的是实现-forwardingTargetForSelector
并在需要时切换目标,但它不干净也不实用(它会发出警告,你不能使用点语法)
答案 0 :(得分:0)
您可以将属性声明为@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];
}
}