Существует большая разница.
@class MyViewController;
является предварительным объявлением для объекта MyViewController
. Он используется, когда вам просто нужно сообщить компилятору о типе объекта, но нет необходимости включать файл заголовка.
Если, однако, вам нужно создать объект этого типа и вызвать для него методы, вам необходимо:
#import "MyViewController.h"
Но обычно это делается в файле .m
.
Дополнительное использование предварительных объявлений - это когда вы определяете @protocol
в том же заголовочном файле, что и объект, который его использует.
@protocol MyProtocolDelegate; //forward declaration
@interface MyObject {
id<MyProtocolDelegate> delegate;
...
}
...
@end
@protocol MyProtocolDelegate
... //protocol definition
@end
В приведенном выше примере компилятору необходимо знать, что @protocol MyProtocolDelegate
допустим, прежде чем он сможет скомпилировать объект MyObject
.
Простое перемещение определения протокола выше MyObject
Определение также будет работать.