Ответ 1
Существует большая разница.
@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
также будет работать.