Важно понимать, что такое #import
(и версия C: #include
).
Компиляция программ C концептуально есть 3 шага:
- Preprocessing
- Компиляция
- Связывание
В директивах, начиная с #
которые действовали на препроцессором (это не независимо от того, является ли это отдельной бинарной или частью компилятора). Оба этих утверждения приводят к тому, что содержимое именованного файла будет вставлено в файл импорта (или включая) в том месте, где найдена директива. Это совершенно язык-агностик. В импортированном файле может быть что угодно. Вы можете импортировать JPG, если хотите (но удача компиляции!).
В вашем примере, за счет импорта Son1.h
и Son2.h
в Main.h
, вы создаете, с точки зрения компилятора, один файл с содержимым Son1.h
с последующим содержанием Son2.h
следуют все, что в Main.h
сам. На этом уровне идея скрытия контента не имеет смысла. Вы явно попросили препроцессор разместить это содержимое там. Он ничего не знает о тексте, который он вставляет, поэтому он не может следовать какой-либо директиве Objective-C, даже если таковой существует.
Комментарии попадают в другой пункт. Импорт в .h
должен быть сведен к абсолютному минимуму. Наиболее распространенными причинами для импорта являются определения типов классов и протоколов, а Objective-C позволяет вам заранее объявить обоим из них, чтобы избежать ненужных импортных импортных операций.
Если у вас есть что-то вроде:
@interface MyClass : NSObject
@property(nonatomic, strong) MyOtherClass *myOtherClass;
@end
Вы обычно должны были бы #import "MyOtherClass.h"
.Тем не менее, с форвардными декларациями, вы можете сделать это вместо:
@class MyOtherClass;
И переместите #import
в файл реализация, который, как правило, скрыт от других файлов.
Импорт в .m? И если нужно, делайте '@class Son1;' и '@class Son2;', если у вас есть какое-то объявление с 'Son1' или' Son2'. Обратите внимание, что '# import' не имеет"; ". – Larme
Если вы не хотите, чтобы они включались при включении Main.h, не помещайте их в Main.h. В общем, вы должны учитывать, что какие-либо включения/импорта в заголовок должны быть частью этого заголовка, потому что это то, что увидит компилятор. Если вы хотите, чтобы определенные файлы включались только при определенных условиях, не включайте их в заголовок «зонтик», который включает все. –
проблема заключается в том, что мне нужно «# import» в «зонтике», так как Main выполняет некоторую работу с ними. Как я могу обрабатывать '# import' в .m с' @ class' в 'Main.h', используя также делегаты (которые из импортированных файлов) – zerbfra