Objective-C @class / импорт лучших практик - PullRequest
0 голосов
/ 14 марта 2010

Я заметил, что многие примеры Objective-C будут пересылать объявления классов с @class, а затем импортировать класс в файле .m с импортом. Я понимаю, что это считается наилучшей практикой, как объясняется в ответах на вопрос: @ class vs. # import

Исходя из C ++, это выглядит задом наперед. Обычно я включаю все необходимые файлы .h в новый заголовочный файл классов. Это кажется полезным, так как это заставит компилятор генерировать предупреждение, когда два класса включают друг друга, и в этот момент я могу решить, является ли это плохим или нет, затем использовать тот же стиль Objective-C и затем объявить класс в заголовке включите его в файл .cpp.

В чем преимущество объявления вперед @class и импорта в файл реализации? Должен ли быть лучшим практическим приемом в C ++ пересылать объявления классов, а не включать заголовочный файл? Или неправильно думать об Objective-C и C ++ в этих похожих терминах для начала?

1 Ответ

7 голосов
/ 14 марта 2010

Если честно, ваш C ++ на самом деле задом наперед. Обычно в C ++ вы хотите избежать включения заголовков в другие заголовки, предпочитая предварительные объявления включениям. Как правило, это считается наилучшей практикой, поскольку это уменьшает время компиляции и уменьшает размер предварительно обработанных файлов кода, подаваемых в компилятор, до необходимого размера. У Скотта Мейерса есть отличный раздел об этом в Effective C ++.

Чтобы более прямо ответить на ваш вопрос, преимущество объявления классов вперед и импорта их в файл реализации (как в C ++, так и в целях c) состоит в том, что в объявлениях forward это делается так, что любой другой класс, использующий ваш класс, не ' Обязательно нужно включить все, что использует ваш класс. Это уменьшает размер предварительно обработанных файлов кода (что ускоряет предварительную обработку), ускоряет компиляцию и ускоряет компоновку. Все из которых обычно хорошие вещи. В более неясных случаях сокращение операторов include может упростить поиск определенных типов ошибок (например, пропущенных точек с запятой в заголовках), которые выдают предупреждения компилятора, которые не всегда очевидны, но повторяются и рассылаются спамом везде, где включены заголовки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...