Что происходит, когда мы отправляем сообщение на id - PullRequest
2 голосов
/ 15 февраля 2012

Как сказано в документах на веб-сайте Apple, когда мы отправляем сообщение в переменную класса, которая расширяет NSObject, это означает, что мы вызываем функцию objc_msgSend и ищем метод в таблице методов класса. Если не найден, он проходит через суперкласс, пока не достигнет NSObject. Тем не менее, кажется, что он будет вести себя иначе, когда мы отправим сообщение id, как сказано в этом блоге: http://cocoawithlove.com/2011/06/big-weakness-of-objective-c-weak-typing.html

Что это значит, ища все методы? Кто-нибудь может рассказать мне подробности?

1 Ответ

0 голосов
/ 08 марта 2012

Кажется, я неправильно понимаю поиск во время выполнения и поиск компиляции. во время компиляции , то, что нужно компилятору - это сигнатура метода, поэтому он ищет его по типу класса. Отправка сообщения в id означает, что компилятор должен искать все существующие методы. во время выполнения то, что делает время выполнения, - это поиск реального адреса imp с помощью информации «что такое класс».

...