Переопределение вариационного метода в objective-c
При подклассов в objective-c, как я могу переадресовать вызов суперклассу в случае вариационного метода. К чему я должен заменить??? ниже, чтобы отправить все объекты, которые я получил?
- (void) appendObjects:(id) firstObject, ...
{
[super appendObjects: ???];
}
Ответы
Ответ 1
Вы не можете. Чтобы безопасно передать все вариационные аргументы, вам нужен метод для принятия va_list
.
В супер,
-(void)appendObjectsWithArguments:(va_list)vl {
...
}
-(void)appendObject:(id)firstObject, ...
va_list vl;
va_start(vl, firstObject);
[self appendObjectsWithArguments:vl];
va_end(vl);
}
И используйте [super appendObjectsWithArguments:vl]
при переопределении метода в подклассе.
Ответ 2
Есть хорошая статья об этом в Cocoa с любовью: списки переменных в Cocoa
Ответ 3
Попробуйте следующее:
- (void) appendObjects:(id) firstObject, ...
{
va_list args = &firstObject;
[super appendObjects: args];
}
Если это не делает трюк, прочитайте страницы руководства по varargs.