背景:BackendClient
我有一个代表与服务器连接
的对象(我们称之为)。它的方法生成为单个@protocol
并且它们都是同步的,所以我想创建将在后台调用它们的代理对象。主要问题是返回值,我显然不能从异步方法返回,所以我需要传递一个回调。“简单”的方法是复制 allBackendClient
的方法并添加回调参数。但这不是解决该问题的动态方式,而 ObjectiveC 的本质是动态的。那就是performSelector:
出现的地方。它完全解决了问题,但它几乎扼杀了代理对象的透明度。
问题:
我希望能够将未声明的选择器发送到代理(的子类NSProxy
)对象,就好像它已经声明过一样。例如,我有方法:
-(AuthResponse)authByRequest:(AuthRequest*)request
在BackendClient
协议中。我希望代理调用看起来像这样:
[proxyClient authByRequest:myRequest withCallback:myCallback];
但这不会编译,因为
'BackendClientProxy' 没有可见的@interface 声明选择器'authByRequest:withCallBack:'
好的。让我们稍微冷静一下编译器:
[(id)proxyClient authByRequest:myRequest withCallback:myCallback];
哇。另一个错误:
选择器“authByRequest:withCallBack:”没有已知的实例方法
我想到的唯一一件事就是@protocol
在运行时以某种方式使用所需的方法构造新的,但我不知道该怎么做。
结论:我需要抑制这个编译错误。知道怎么做吗?