Spec-Zone.ru › GCC 11

Вверх: +load: Выполнение кода перед main [Оглавление][Индекс]

8.2.1 Что можно и чего нельзя сделать в +load ¶

+load следует использовать только в крайнем случае. Поскольку он выполняется очень рано, большая часть механизма выполнения Objective-C не будет готова, когда выполняется +load; следовательно, +load лучше всего подходит для выполнения кода C, независимого от выполнения Objective-C.

Реализация +load в GNU runtime гарантирует следующее:

  • вы можете написать любой код C, который вам нравится;
  • вы можете выделять память и отправлять сообщения объектам, класс которых реализован в том же файле;
  • реализация +load всех родительских классов класса выполняется перед реализацией +load этого класса;
  • реализация +load класса выполняется перед реализацией +load любого категорийного класса.

В частности, следующие вещи, даже если они могут работать в конкретном случае, не гарантируются:

  • выделение памяти или отправка сообщений произвольным объектам;
  • выделение памяти или отправка сообщений объектам, классы которых имеют категорию, реализованную в том же файле;
  • отправка сообщений объектам Objective-C (@"this is a constant string");

Вы не должны предполагать получения +load в братских классах при написании +load класса. Порядок, в котором братские классы получают +load не гарантируется.

Порядок вызова +load и +initialize может быть проблематичным, если это имеет значение. Если вы не выделяете объекты внутри +load, гарантируется, что +load вызывается перед +initialize. Если вы создаете объект внутри +load, метод +initialize класса объекта вызывается, даже если +load не был вызван. Обратите внимание, если вы явным образом вызываете +load для класса, +initialize будет вызван первым. Чтобы избежать возможных проблем, попробуйте реализовать только один из этих методов.

Метод +load также вызывается, когда пакет динамически загружается в вашу работающую программу. Это происходит автоматически без каких-либо промежуточных операций с вашей стороны. Когда вы пишете пакеты и вам нужно написать +load, вы можете безопасно создавать и отправлять сообщения объектам, классы которых уже существуют в работающей программе. Те же ограничения, что и выше, применяются к классам, определенным в пакете.

Вверх: +load: Выполнение кода перед main [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/What-you-can-and-what-you-cannot-do-in-_002bload.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API