Подобная method_missing функциональность в target-c (т.е. динамическое делегирование во время выполнения)
Я пытаюсь преобразовать один вызов метода в другой динамически (во время выполнения).
Например, я хотел бы следующее:
[obj foo]
делегировать:
[obj getAttribute: @"foo"]
(Я хотел бы сделать это динамически, так как я не знаю заранее, какими будут эти имена методов или атрибуты).
Я вижу, что есть крюк в:
- (id) forwardingTargetForSelector: (SEL) aSelector
Кажется, это работает только для делегирования, но я хочу сохранить объект как "себя" и преобразовать аргументы метода.
Где мне искать такое поведение? Это вообще возможно в obj-c?
1 ответ
Вы можете использовать метод -forwardInvocation:
для этого. Требуется полный NSInvocation
объект, который представляет вызов метода, и вы можете обрабатывать его так, как пожелаете. Если вы сделаете это, вы также должны переопределить -methodSignatureForSelector:
вернуть правильный NSMethodSignature
(требуется для -forwardInvocation:
работать на неизвестных селекторах). Также рекомендуется переопределить -respondsToSelector:
заявить, что вы можете обрабатывать селектор в вопросе.