如何在 Objective-c 中实现代理模式(使用运行时和其他 objc 功能)
How to implement Proxy pattern in Objective-c (using runtime and other objc features)
有时我需要在 ObjC 中实现 proxy pattern。如果我在运行时创建 inner subject 并且不想将创建逻辑从代理中移出,我需要它。有时我在代理中使用几个对象,而且我更喜欢使用 ARC 来进行内存管理。现在我使用 C++ 风格实现它:
- (void)setProperty:(CGFloat)value
{
_innerObject.value = value;
}
- (CGFloat)property
{
return _innerObject.value;
}
<...>
我认为这不是最好的方法,我认为存在更简单的方法。我想使用 ObjC 运行时并自动转发消息。
如果不手动编写每个 set/get 方法,我怎么能做到呢?
- forwardingTargetForSelector:
“[r]返回无法识别的消息应该首先定向到的对象”。所以:
// Will be queried for every message that is sent to `self` but
// which `self` does not itself implement.
- (id)forwardingTargetForSelector:(SEL)selector
{
return _innerObject;
}
有时我需要在 ObjC 中实现 proxy pattern。如果我在运行时创建 inner subject 并且不想将创建逻辑从代理中移出,我需要它。有时我在代理中使用几个对象,而且我更喜欢使用 ARC 来进行内存管理。现在我使用 C++ 风格实现它:
- (void)setProperty:(CGFloat)value
{
_innerObject.value = value;
}
- (CGFloat)property
{
return _innerObject.value;
}
<...>
我认为这不是最好的方法,我认为存在更简单的方法。我想使用 ObjC 运行时并自动转发消息。
如果不手动编写每个 set/get 方法,我怎么能做到呢?
- forwardingTargetForSelector:
“[r]返回无法识别的消息应该首先定向到的对象”。所以:
// Will be queried for every message that is sent to `self` but
// which `self` does not itself implement.
- (id)forwardingTargetForSelector:(SEL)selector
{
return _innerObject;
}