是否可以使用@selector
和performSelector:
(或类似)使用可变参数列表的方法?
我正在编写一个可以分配一个委托来覆盖默认行为的类。在存在委托的情况下,对该类的实例进行的选择方法调用将转发到相同的相应委托方法,其中一些使用可变参数列表。
因此,例如,我需要能够创建检索SEL
引用并使用如下方法向委托对象发送消息:
- (void)logEventWithFormat:(NSString *)format, ... {
va_list argList;
id del = self.delegate;
if (del != nil &&
[del conformsToProtocol:@protocol(AProtocolWithOptionalMethods)] &&
[del respondsToSelector:@selector(logEventWithFormat:)])
{
// Perform selector on object 'del' with 'argList'
}
}
我假设这是不可能的,因此 Foundation 框架中的类似方法声明 - 在NSString
:
- (id)initWithFormat:(NSString*)format, ...;
和
- (id)initWithFormat:(NSString *)format arguments:(va_list)argList;
我假设我希望委托给的协议应该建议实施:
- (void)logEventWithFormat:(NSString *)format arguments:(va_list)argList;
所以我@selector(logEventWithFormat:arguments:)
可以使用选择器来调用:
[del performSelector:@selector(logEventWithFormat:arguments:)
withObject:format
withObject:argList];
我只是想知道我是否遗漏了一些东西,或者为了实现我想要的东西而走了很长一段路?