Как создать NSInvocation из реализации вызванного метода? - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть функция, которая выглядит так:

void myMethodImpl(id self, SEL _cmd, ...)

Я использую это как реализацию метода для класса

class_addMethod(aClass, aSelector, (IMP)myMethodImpl, types);

поэтому myMethodImpl get вызывается при отправке сообщения в класс с селектором aSelector. Теперь я хотел бы создать NSInvocation со всеми параметрами из myMethodImpl.

Есть ли простой способ создать NSInvocation из списка параметров или мне нужно проверить каждый элемент на предмет его типа и добавить его соответствующим образом?

Ответы [ 3 ]

2 голосов
/ 24 декабря 2011

Поскольку вы добавляете метод в класс, почему бы не добавить вместо него / swizzle forwardInvocation:? В этот момент среда выполнения создаст для вас красивый вызов.

1 голос
/ 23 декабря 2011

Это невозможно. Простой поиск в Google показывает эту статью:

http://www.wincent.com/a/about/wincent/weblog/archives/2006/03/nsinvocation_an.php

Что ясно объясняет, как va_args не работает должным образом с NSInvocation.

0 голосов
/ 31 марта 2014

Возможно, действительно. Посмотрите на функцию actionSelectorImplementation в https://github.com/rlopezdiez/TMInstanceMethodSwizzler/blob/master/Classes/TMInstanceMethodSwizzler.m

...