Передайте - объявляют перечисление в Objective C

Меня попросили реализовать этот алгоритм на собеседовании по кодированию в режиме реального времени, вот мое реорганизованное решение в C #:

Git Тесты

66
задан Stephen Touset 3 June 2009 в 18:52
поделиться

3 ответа

Используйте #import . Единственная причина, по которой люди рекомендуют использовать @class , когда это возможно, заключается в том, что это немного ускоряет компиляцию вашего кода. Однако проблема с #import одним файлом .h из другого не возникает. Фактически, вам нужно сделать это при расширении другого класса.

11
ответ дан 24 November 2019 в 15:06
поделиться

Вам все равно придется либо #import , либо создать отдельный файл заголовка, содержащий только typedef . Отсутствие импорта файлов заголовков в заголовок ускоряет компиляцию, но ничего не меняет.

Почему C ++ не поддерживает прямое объявление перечислений?

-2
ответ дан 24 November 2019 в 15:06
поделиться

Ответ на ваш вопрос - либо продолжить и импортировать файл заголовка typedef, либо использовать общий тип, такой как NSInteger, вместо типа перечисления.

Однако есть больше причин для не импортировать файл заголовка, чем просто скорость компиляции.

Отсутствие импорта файла заголовка также уменьшает ваш непреднамеренный доступ к посторонним классам.

Например, скажем, у вас есть класс TrackFileChanges, который отслеживает файловую систему на предмет изменений в конкретном файле , и у вас есть класс CachedFile, в котором хранятся кэшированные данные из файла. Последний может использовать частный ivar типа TrackFileChanges *, но для использования CachedFile это просто деталь реализации (в идеале ivar будет автоматически сгенерирован с частным свойством с использованием новой среды выполнения, но это невозможно, если вы ' повторно используем старую среду выполнения).

Таким образом, клиентам, которые #import "CachedFile.h", вероятно, не нужен или не нужен доступ к TrackFileChanges.h. И если они это сделают, они должны прояснить это, # импортировав это сами. Используя @class TrackFileChanges вместо #import "TrackFileChanges.h" в CachedFile.h, вы улучшаете инкапсуляцию.

Но все, что сказано, нет ничего неправильного в импорте файла заголовка из второго файла заголовка, если второй заголовок хочет первым выставить всем клиентам. Например, файлы заголовков, которые объявляют классы, необходимо импортировать непосредственно в файлы заголовков подклассов, а файлы заголовков, объявляющие протоколы, вполне могут быть импортированы напрямую (хотя вы можете использовать @protocol ABC; чтобы избежать этого).

они должны прояснить это, # импортировав это сами. Используя @class TrackFileChanges вместо #import "TrackFileChanges.h" в CachedFile.h, вы улучшаете инкапсуляцию.

Но все, что сказано, нет ничего неправильного в импорте файла заголовка из второго файла заголовка, если второй заголовок хочет первым выставить всем клиентам. Например, файлы заголовков, которые объявляют классы, необходимо импортировать непосредственно в файлы заголовков подклассов, а файлы заголовков, объявляющие протоколы, вполне могут быть импортированы напрямую (хотя вы можете использовать @protocol ABC; чтобы избежать этого).

они должны прояснить это, # импортировав это сами. Используя @class TrackFileChanges вместо #import "TrackFileChanges.h" в CachedFile.h, вы улучшаете инкапсуляцию.

Но все, что сказано, нет ничего неправильного в импорте файла заголовка из второго файла заголовка, если второй заголовок хочет первым выставить всем клиентам. Например, файлы заголовков, которые объявляют классы, необходимо импортировать непосредственно в файлы заголовков подклассов, а файлы заголовков, объявляющие протоколы, вполне могут быть импортированы напрямую (хотя вы можете использовать @protocol ABC; чтобы избежать этого).

нет ничего плохого в импорте файла заголовка из второго файла заголовка, если второй заголовок хочет открыть первый для всех клиентов. Например, файлы заголовков, которые объявляют классы, необходимо импортировать непосредственно в файлы заголовков подклассов, а файлы заголовков, объявляющие протоколы, вполне могут быть импортированы напрямую (хотя вы можете использовать @protocol ABC; чтобы избежать этого).

нет ничего плохого в импорте файла заголовка из второго файла заголовка, если второй заголовок хочет открыть первый для всех клиентов. Например, файлы заголовков, которые объявляют классы, необходимо импортировать непосредственно в файлы заголовков подклассов, а файлы заголовков, объявляющие протоколы, вполне могут быть импортированы напрямую (хотя вы можете использовать @protocol ABC; чтобы избежать этого).

15
ответ дан 24 November 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: