предварительное объявление для интерфейсов objective-c

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

@interface MyClass : NSObject <AVAudioSessionDelegate>
{

}

@end

в цели c


person aerlfredith    schedule 28.05.2013    source источник


Ответы (1)


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

@class MyClass;

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

@protocol AVAudioSessionDelegate;

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

person justin    schedule 28.05.2013
comment
На самом деле это не отвечает на вопрос, как я должен заранее объявлять объекты @interface. Был бы полезен пример, использующий то, что я привел. - person aerlfredith; 28.05.2013
comment
извините, ваш ответ решил мою проблему, я просто не полностью понял, что вы имели в виду. Объект @interface также предварительно объявлен с помощью @ class MyClass; Я ожидал чего-то большего, вроде @ interface Myclass ;. Простите за это. БЛАГОДАРНОСТЬ - person aerlfredith; 28.05.2013
comment
Феноменальный ответ. Вы бы не подумали использовать @class, поскольку Objective-C использует ключевые слова _2 _ / _ 3_. Чтобы найти это, я искал в Google предварительное объявление @interface @implementation. - person bobobobo; 16.12.2013