是否可以转发属性?
问题描述:
是否可以转发财产?是否可以转发属性?
比方说,我有一个代理类,其中有一个名为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];
}
}
这几乎是我写的问题...我知道这是存在的。只是觉得它不是“漂亮”。其实@dynamic位是我忘记提及哪些删除所有警告。 谢谢你的提醒! – 2011-05-25 04:36:37