我想编写一个代理,该代理通过TCP将方法调用转发到另一个对象,而没有NSConnection
和NSDistanceObject
东西。我想要的是我自己的协议。
问题在于,子类化NSProxy和覆盖forwardInvocation:
是不够的。我还必须覆盖methodSignatureForSelector
这是我的问题:
– (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
return ???
}
最佳答案
@Brian,这可能没问题,但是setProtocolForProxy:
仅用于优化。 cocoafan可以为他的解决方案强制使用它,但它不是替代品。您应该能够自动获得签名。为此,网络协议需要一种方法来请求签名。
我相信这里的解决方案是在网络协议中包括一个“请求方法签名”方法,并使它在远处的对象上运行methodSignatureForSelector:
并进行编码并返回结果。这就是NSDistantObject
的作用。
如果您经常闲聊,提供setProtocolForProxy:
是一项重要的优化,但是它确实将您限制在您拥有协议的对象上,并且在10.5之前引入了一些令人讨厌的限制(需要所有方法)。即使是在10.5上,如果它是获取方法签名的唯一方法,它也可能会引入一些有问题的限制。
@cocoafan,我认为您可能是在NSProxy
之上从头开始创建此对象的正确方法,但是请仔细阅读NSConnection
并查看是否可以对其进行子类化以按所需方式管理网络连接。如果您能找到一种方法来做到这一点(尽管我看不到一个简单的方法),您可能会从NSDistantObject
免费获得很多东西。