В основном он сообщает компилятору, что класс RootViewController
существует, без указания того, как именно он выглядит (т.е. его методы, свойства и т. Д.). Вы можете использовать это для написания кода, который включает RootViewController
переменные-члены без необходимости включать полное объявление класса.
Это особенно полезно при разрешении циклических зависимостей - например, когда, скажем, 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 и C ++ (и, возможно, во многих других языках), которые также поддерживают предварительное объявление и обычно используют это для тех же целей.