@import vs #import - iOS 7

Основываясь на ответе @Johannes Schaub с решением, подходящим для кода, которым вы не владеете.

Псевдоним функции, которую вы хотите переопределить, в слабо определенную функцию, а затем переопределите ее самостоятельно.

override.h

#define foo(x) __attribute__((weak))foo(x)

foo.c

function foo() { return 1234; }

override.c

function foo() { return 5678; }

Используйте pattern-

%foo.o: ALL_CFLAGS += -include override.h

Рядом: Возможно, вы также можете использовать -D 'foo(x) __attribute__((weak))foo(x)' для определения ваших макросов.

в вашем Makefile, чтобы добавить флаг компилятора -include override.h.

%foo.o: ALL_CFLAGS += -include override.h

] Скомпилировать и связать файл с вашей повторной реализацией (override.c).

  • Это позволяет вам переопределить одну функцию из любого исходного файла без изменения кода.
  • Недостатком является то, что вы должны использовать отдельный файл заголовка для каждого файла, который вы хотите переопределить.

422
задан Cœur 30 July 2017 в 10:14
поделиться

1 ответ

модуль <глоток> [Структура] предложения лучший способ работать с системными платформами и библиотеками путем замены текстового механизма включения препроцессора тем, что Лязг называет семантическим импортом. Для импорта модуля, Вы используете @import объявление вместо #include или #import директивы препроцессору

, Когда компилятор видит, что модуль импортирует @import, это загружает автономное precompiled версия двоичного файла. Это также автоматически заботится о соединении с модулем, означающим Вас, больше не должен вручную добавлять платформу в XCode. Так как модуль компилируется только, после того как больше нет никакого преимущества для включения заголовка платформы в prefix.pch. В результате сборка Заголовка Префикса Перед компиляцией, устанавливающая теперь значения по умолчанию на НЕ в XCode.

@import решает следующие проблемы:

  • Импорт завершает семантическое описание платформы
  • , Doesn’t должен проанализировать заголовки
  • двоичное представление Загрузок
  • более гибкий, чем предварительно скомпилированные заголовки .pch <глоток> [О]
  • Никакая потребность поддержать Ваши .pch файлы

#import и #include, директивы автоматически преобразовываются в @import негласно, принося Вам пользу модулей без любой работы.

при создании собственного framework XCode генерирует карту модуля, которая включает umbrella header <глоток> [О]

, Когда Вы создадите свое собственное library использование Objective C , необходимо будет создать собственную карту модуля ( .modulemap) и удостовериться, что его содержание актуально. <глоток> [Создают библиотеку] <глоток> [устанавливают modulemap] <глоток> [Пользовательский modulemap]

#mport по сравнению с [1 114]

Read больше здесь , здесь

1
ответ дан 4 October 2019 в 00:13
поделиться