Лучшая практика и объяснение: #import в.m или.h

Необходимо перенести их в отделение без плавания.

Response with two lines
single line note

я также использую патч clearfix на здесь http://www.webtoolkit.info/css-clearfix.html

7
задан Rudi 15 September 2009 в 22:10
поделиться

6 ответов

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

8
ответ дан 6 December 2019 в 06:37
поделиться

Если вы поместите все свои #import в файлы заголовков, тогда никакие два класса не могут зависеть друг от друга, потому что файл не может импортировать файл, который его импортирует. С другой стороны, если вы поместите #import в файл реализации, проблема исчезнет.

11
ответ дан 6 December 2019 в 06:37
поделиться

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

Аргументация проста; ссылаясь только на классы в заголовке, а не импортируя весь интерфейс, вы можете определять взаимозависимые классы (т.е. классы, которые зависят друг от друга), в противном случае такая настройка невозможна, потому что произойдет рекурсивное включение файлов (но Objective-C #import гарантирует, что этого не произойдет).

4
ответ дан 6 December 2019 в 06:37
поделиться

Интерфейс - это обычно просто методы, которые предоставляет класс. Один интерфейс может иметь любое количество взаимозаменяемых реализаций. Импорт внутри реализации, а не внутри заголовка, не позволяет другим реализациям импортировать классы, которые могут не понадобиться. Речь идет о сокрытии информации и хранении кода по необходимости.

2
ответ дан 6 December 2019 в 06:37
поделиться

В чем смысл размещения операторов #import в файлах .m, а не в файлах .h в Objective-C?

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

1
ответ дан 6 December 2019 в 06:37
поделиться

Помимо всего прочего, это также выигрыш в производительности для времени компиляции. Когда вы #import файл, это как если бы вы вставили содержимое файла в свой заголовок. Это больше, чем нужно для компилятора при компиляции вашего кода.

См. Эту страницу о производительности компилятора Clang .

Обратите внимание, что предварительно скомпилированные заголовки решают большую часть проблемы в случае стандартных заголовков, таких как Cocoa.h.

1
ответ дан 6 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

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