Я использую ножницы символ для «вырезать» на сайте - https://unicode-table.com/
Для копирования я использую два квадрата , но вы также можете использовать - Два последовательных знака равенства или Маджонг Tile Two of Bamboos .
Для вставки я использую - Буфер обмена символов . Эти символы соответствуют символам в слове.
Как отправляются сообщения Obj-C?
Сообщения Objective-C отправляются с использованием функции среды выполнения objc_msgSend ()
. Как показано в документации Apple , функция принимает как минимум 2 аргумента:
Экземпляры класса имеют указатель isa
, который является указателем на их объект класса. Селекторы методов в каждом объекте хранятся в «таблице» в объекте класса, а функция objc_msgSend ()
следует за указателем isa
на объект класса, чтобы найти это table и проверяет, находится ли метод в таблице для класса. Если он не может его найти, он ищет метод в таблице суперкласса класса. Если не найден, он продолжает движение вверх по дереву объектов, пока не найдет метод или не дойдет до корневого объекта ( NSObject
). На этом этапе создается исключение.
Как кэшируются указатели метода экземпляра и можете ли вы (в общем) определить, прочитав код, будет ли сообщение кэшировано?
Из руководства Apple по времени выполнения Objective-C на Обмен сообщениями :
Чтобы ускорить процесс обмена сообщениями, система времени выполнения кэширует селекторы и адреса методов по мере их использования. Для каждого класса существует отдельный кеш, и он может содержать селекторы для унаследованных методов, а также для методов, определенных в классе. Перед поиском в таблицах рассылки процедура обмена сообщениями сначала проверяет кеш класса получающего объекта (исходя из теории, что метод, который использовался однажды, может быть использован снова). Если селектор метода находится в кэше, обмен сообщениями выполняется лишь немного медленнее, чем вызов функции. Как только программа проработает достаточно долго, чтобы «прогреть» свои кеши, почти все отправляемые им сообщения находят кешированный метод. Кеши растут динамически, чтобы вместить новые сообщения по мере выполнения программы.
Как указано, кэширование начинается после запуска программы, и после того, как программа проработает достаточно долго, большинство вызовов методов будут выполняться через кэшированный метод. Как также сказано, кеширование происходит по мере использования методов, поэтому сообщение кэшируется только тогда, когда оно используется.
Являются ли методы класса по существу такими же, как функция C (или метод статического класса в C ++), или есть что-то большее?
Объекты классов обрабатывают отправку методов аналогично тому, как это происходит с экземплярами классов. Каждый объект класса имеет объект, который хранит свои собственные методы класса в объекте, называемом метаклассом
. У объекта класса есть собственный isa
указатель на его объект метакласса, который, в свою очередь, имеет объекты суперметакласса, от которых он может наследовать объекты класса. Отправка методов в методы класса выглядит так:
isa
объекта класса на объект метакласса Я также написал инструкцию по objc_msgSend() на x86_64 в своем веб-блоге, если кто-то хочет углубиться:
http://www.friday.com/bbum/2009/12/18/objc_msgsend-part-1-the-road-map/