Цель C - В чем разница между IMP и указателем на функцию?
Я недавно запустил проект, в котором мне нужно заняться алкоголем.
Пройдя много уроков, я получил вопрос: в чем разница между реализацией и указателем на функцию?
1 ответ
Решение
Из памяти IMP является адресом памяти точно так же, как указатель на функцию, и может вызываться так же, как обычная функция C. Однако гарантируется использование соглашения об обмене сообщениями Objective C, где:
- Первый аргумент - это объект, с которым нужно оперировать (self).
- Второй аргумент
_cmd
(SELECTOR) для вызова. Я полагаю, что это так, чтобы поддерживать динамические функции, такие как пересылка сообщений ObjC, где мы могли бы обернуть оригинальную реализацию в прокси, скажем, чтобы запустить транзакцию или выполнить проверку безопасности, или, для конкретного примера Какао, добавить некоторое наблюдение за свойствами по волшебству, во время выполнения. Хотя у нас уже есть сигнатура функции, в некоторых случаях мне может быть полезно узнать, "как я сюда попал?" с подписью сообщения. - Следующие аргументы, если таковые имеются, соответствуют методу контракта.