По сути, он сообщает компилятору, что класс 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 ++ (и, вероятно, многих других языках), которые также поддерживают форвардное объявление и обычно используют его для те же цели.
person
Mac
schedule
04.03.2011