如何在Objective-c中实现代理模式(使用运行时和其他objc特性)

如何在Objective-c中实现代理模式(使用运行时和其他objc特性),objective-c,proxy-pattern,Objective C,Proxy Pattern,有时我需要在ObjC中实现。如果我在运行时创建内部主体,并且不想将创建逻辑从代理中移出,我需要它。有时我在代理中使用两个对象,而且我更喜欢使用ARC而不是memory菜单项。现在我用C++风格实现: - (void)setProperty:(CGFloat)value { _innerObject.value = value; } - (CGFloat)property { return _innerObject.value; } <...> -(void)

有时我需要在ObjC中实现。如果我在运行时创建内部主体,并且不想将创建逻辑从代理中移出,我需要它。有时我在代理中使用两个对象,而且我更喜欢使用ARC而不是memory菜单项。现在我用C++风格实现:

- (void)setProperty:(CGFloat)value
{
    _innerObject.value = value;
}


- (CGFloat)property
{
    return _innerObject.value;
}

<...> 
-(void)setProperty:(CGFloat)值
{
_innerObject.value=值;
}
-(CGFloat)属性
{
返回_innerObject.value;
}
我认为这不是一个最好的方式,我认为存在更容易的方式。我想使用ObjC运行时并自动转发消息。
如果不手工编写每个set/get方法,我如何做到这一点

“[r]返回未识别消息应首先指向的对象”。因此:

“[r]返回未识别消息应首先指向的对象”。因此:


您的类是
NSProxy
的子类吗?不,我的类是NSObject,但我可以使用NSProxy,我以前从未使用过它。您的类是
NSProxy
的子类吗?不,我的类是NSObject,但我可以使用NSProxy,我以前从未使用过它。据我所知,我必须将此方法添加到我的类中并删除我的实现。我说得对吗?我应该如何实现属性?可能是我应该使用动态?很抱歉回复太慢:是的。还有一个
-forwardInvocation:
,它允许您捕获提供给代理的消息的完整内容,以防您想稍后而不是现在发送它们,但这是一种比
-forwardingTargetForSelector:
更慢的机制,我必须将此方法添加到我的类中并删除我的实现。我说得对吗?我应该如何实现属性?可能是我应该使用动态?很抱歉回复太慢:是的。还有一个
-forwardInvocation:
,它允许您捕获提供给代理的消息的完整内容,以防您想稍后而不是现在发送它们,但它比
-forwardingTargetForSelector:
的机制要慢。
// Will be queried for every message that is sent to `self` but
// which `self` does not itself implement.
- (id)forwardingTargetForSelector:(SEL)selector
{
    return _innerObject;
}