Forward для интерфейсов objective-c

Как перенаправить объявление этого объекта:

@interface MyClass : NSObject <AVAudioSessionDelegate>
{

}

@end

в объекте c

Ответ 1

Это форвардное объявление типа ObjC:

@class MyClass;

И это прямое объявление протокола ObjC:

@protocol AVAudioSessionDelegate;

Для тех из вас, кто интересуется, почему это полезно: форвардные декларации могут использоваться для значительного сокращения ваших зависимостей и значительного сокращения времени сборки, поскольку это позволяет избежать #import заголовков и/или целых фреймворков (которые затем #import другие рамки). Когда форвардные декларации не используются, многие ненужные заголовки видны другим частям вашей программы. Изменение одного заголовка может привести к перекомпиляции многих файлов, а время компиляции и ссылок увеличится. Поскольку типы ObjC всегда рассматриваются как указатели (на нашем уровне абстракции), в большинстве случаев достаточно декларации в начале. Затем вы можете объявить свои ivars в своем @implementation или продолжении класса, а #import может перейти в файл *.m. Другая причина заключается в том, чтобы избежать круговых зависимостей.