@class
існує для розриву кругових залежностей. Скажімо, у вас є класи A і B.
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
Курка; зустріти Яйце. Це ніколи не може скомпілюватися, оскільки інтерфейс A залежить від того, як B визначається, і навпаки.
Таким чином, це можна виправити, використовуючи @class
:
@class B;
@interface A:NSObject
- (B*)calculateMyBNess;
@end
@interface B:NSObject
- (A*)calculateMyANess;
@end
@class
фактично повідомляє компілятору, що такий клас десь існує, і, таким чином, покажчики, оголошені, що вказують на екземпляри згаданого класу, є цілком дійсними. Однак ви не можете викликати метод у посиланні на екземпляр, тип якого визначений лише як, @class
оскільки додаткові метадані не доступні компілятору (я не пам'ятаю, чи повертає сайт виклику для оцінки як виклик через id
або ні).
У вашому прикладі @class
це нешкідливо, але зовсім непотрібно.