// first, access the SELector you're interested in (example)
SEL sel = @selector(<#SOMETHING#>);
// this is the definition of IMP
id (*IMP)(id, SEL, ...);
получить доступ к IMP для экземпляра определенного класса, используя:
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
в идеале вы приведете результат instanceMethodForSelector: к точному typedef вызываемой функции, чтобы компилятор мог правильно понять sig.
когда у вас есть объект SEL и IMP, затем используйте IMP в качестве обычного указателя на функцию C.
, где первое возвращаемое сообщение функции IMP является объектом (= self
), а второй аргумент является селектором (= _cmd
). это 2 скрытых аргумента объекта.