Необходимо перенести их в отделение без плавания.
Response with two lines
single line note
я также использую патч clearfix на здесь http://www.webtoolkit.info/css-clearfix.html
В любом исходном файле вы должны # импортировать только то, что вам нужно, чтобы сделать этот файл пригодным для компиляции. Имейте в виду, что ваши заголовки могут использоваться другими классами, поэтому вы хотите сделать их как можно более легкими. Вот почему предпочтительно использовать @class для прямого объявления классов, отличных от вашего суперкласса.
Если вы поместите все свои #import
в файлы заголовков, тогда никакие два класса не могут зависеть друг от друга, потому что файл не может импортировать файл, который его импортирует. С другой стороны, если вы поместите #import
в файл реализации, проблема исчезнет.
Если интерфейс вашего класса зависит от интерфейса другого класса (т. Е. Если он является подклассом), тогда включите заголовок, иначе заранее объявите другой класс с помощью @class
и включить заголовок интерфейса этого класса в исходный файл зависимого класса.
Аргументация проста; ссылаясь только на классы в заголовке, а не импортируя весь интерфейс, вы можете определять взаимозависимые классы (т.е. классы, которые зависят друг от друга), в противном случае такая настройка невозможна, потому что произойдет рекурсивное включение файлов (но Objective-C #import
гарантирует, что этого не произойдет).
Интерфейс - это обычно просто методы, которые предоставляет класс. Один интерфейс может иметь любое количество взаимозаменяемых реализаций. Импорт внутри реализации, а не внутри заголовка, не позволяет другим реализациям импортировать классы, которые могут не понадобиться. Речь идет о сокрытии информации и хранении кода по необходимости.
В чем смысл размещения операторов #import в файлах .m, а не в файлах .h в Objective-C?
Возможно, в одном из методов реализации вы создали экземпляр локальной переменной типа класса, который можно использовать только один или два раза, и вы не хотите, чтобы оператор #import
засорял ваш заголовочный файл. Или вы могли использовать @class
в заголовке в качестве предварительного объявления, и вам нужно указать этот класс в своей реализации с помощью оператора #import
.
Помимо всего прочего, это также выигрыш в производительности для времени компиляции. Когда вы #import
файл, это как если бы вы вставили содержимое файла в свой заголовок. Это больше, чем нужно для компилятора при компиляции вашего кода.
См. Эту страницу о производительности компилятора Clang .
Обратите внимание, что предварительно скомпилированные заголовки решают большую часть проблемы в случае стандартных заголовков, таких как Cocoa.h.