Ответ 1
В основном он сообщает компилятору, что класс RootViewController
существует, не указывая, как именно он выглядит (т.е. его методы, свойства и т.д.). Вы можете использовать это для написания кода, который включает переменные типа RootViewController
без необходимости включать полное объявление класса.
Это особенно полезно при разрешении круговых зависимостей - например, где say ClassA
имеет член типа ClassB*
, а ClassB
имеет член типа ClassA*
. Вам нужно объявить ClassB
, прежде чем вы сможете использовать его в ClassA
, но вам также понадобится ClassA
, прежде чем вы сможете использовать его в ClassB
. Передовые декларации позволяют вам преодолеть это, сказав ClassA
, что ClassB
существует, без фактического указания ClassB's
полной спецификации.
Еще одна причина, по которой вы, как правило, обнаруживаете много передовых деклараций, - это то, что некоторые люди принимают конвенцию о начале декларирования классов, если они абсолютно не должны включать полную декларацию. Я не совсем помню, но, возможно, что-то, что Apple рекомендует в нем Objective-C руководящие директивы стиля.
Продолжая мой вышеприведенный пример, если ваши объявления ClassA
и ClassB
находятся в файлах ClassA.h
и ClassB.h
соответственно, вам нужно будет #import
в зависимости от того, какой из них использовать его объявление в другом классе, Использование прямого объявления означает, что вам не нужен #import
, что делает код более красивым (особенно после того, как вы начнете собирать довольно много классов, каждый из которых будет нуждаться в `#import, где он используется), и увеличивает компиляцию производительности за счет минимизации количество кода, которое компилятор должен учитывать при компиляции любого заданного файла.
В стороне, хотя вопрос касается только прямых деклараций в Objective-C, все последующие комментарии также в равной степени применимы к кодированию на C и С++ (и, возможно, на многих других языках), которые также поддерживают декларацию в прямом направлении и обычно используют это для тех же целей.