Ответ 1
"# import" приводит весь файл заголовка в текущий файл; все файлы, в которые включен файл #imports.
@class, с другой стороны (при использовании в отдельной строке с некоторыми именами классов), просто сообщает компилятору: "Эй, вы скоро увидите новый токен, класс, поэтому относитесь к этому так).
Это очень полезно, когда у вас есть потенциал для < круговой включает; т.е. Object1.h ссылается на Object2, а Object2.h ссылается на Object1. Если вы #import both
файлы в другой, компилятор может запутаться, когда он пытается #import
Object1.h, просматривает его и видит Object2.h; он пытается #import
Object2.h, и видит Object1.h и т.д.
Если, с другой стороны, каждый из этих файлов имеет @class
Object1; или @class
Object2;, тогда нет круговой ссылки. Просто убедитесь, что на самом деле #import
требуемые заголовки в ваших файлах реализации (.m).
Пример
Если вы скажете @class myClass
, компилятор знает, что он может видеть что-то вроде:
myClass *myObject;
Не нужно беспокоиться ни о чем, кроме myClass, это допустимый класс, и он должен зарезервировать место для указателя на него (на самом деле, только указатель). Таким образом, в вашем заголовке @class
хватает 90% времени.
Однако, если вам когда-либо понадобится создать или получить доступ к элементам myObject, вам нужно сообщить компилятору, что это за методы. На этом этапе (предположительно в вашем файле реализации) вам нужно #import "myClass.h"
, чтобы сообщить компилятору дополнительную информацию, кроме как "это класс".