Можно ли использовать @selector
и performSelector:
(или аналогичные) с методами, использующими список переменных аргументов?
Я пишу класс, которому можно назначить делегата для переопределения поведения по умолчанию. При наличии делегата вызовы метода select, сделанные для экземпляра этого класса, будут перенаправлены в тот же соответствующий метод делегата, некоторые из которых используют списки переменных аргументов.
Так, например, мне нужно иметь возможность создать ссылку извлечения 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];
Я просто подумал, что я что-то упустил или проделал долгий путь, чтобы достичь того, что я пытаюсь сделать?