Цель C - В чем разница между IMP и указателем на функцию?

Я недавно запустил проект, в котором мне нужно заняться алкоголем.

Пройдя много уроков, я получил вопрос: в чем разница между реализацией и указателем на функцию?

1 ответ

Решение

Из памяти IMP является адресом памяти точно так же, как указатель на функцию, и может вызываться так же, как обычная функция C. Однако гарантируется использование соглашения об обмене сообщениями Objective C, где:

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