Подобная method_missing функциональность в target-c (т.е. динамическое делегирование во время выполнения)

Я пытаюсь преобразовать один вызов метода в другой динамически (во время выполнения).

Например, я хотел бы следующее:

[obj foo]

делегировать:

[obj getAttribute: @"foo"]

(Я хотел бы сделать это динамически, так как я не знаю заранее, какими будут эти имена методов или атрибуты).

Я вижу, что есть крюк в:

 - (id) forwardingTargetForSelector: (SEL) aSelector

Кажется, это работает только для делегирования, но я хочу сохранить объект как "себя" и преобразовать аргументы метода.

Где мне искать такое поведение? Это вообще возможно в obj-c?

1 ответ

Решение

Вы можете использовать метод -forwardInvocation: для этого. Требуется полный NSInvocation объект, который представляет вызов метода, и вы можете обрабатывать его так, как пожелаете. Если вы сделаете это, вы также должны переопределить -methodSignatureForSelector: вернуть правильный NSMethodSignature (требуется для -forwardInvocation: работать на неизвестных селекторах). Также рекомендуется переопределить -respondsToSelector: заявить, что вы можете обрабатывать селектор в вопросе.

Другие вопросы по тегам