Вообще говоря, рекомендуется через #import подключать только те заголовочные файлы, описание классов которых будет использоваться в данном файле.
То есть, если у вас заголовочный файл — вы подключаете через #import только тот класс, от которого наследуетесь (или, соответственно, протоколы, которые реализуете), а все классы, которые принимает или возвращает ваш объект, определяете через @class.
В файле реализации, соответственно, подключаются те заголовки, которые реально используются в коде.
При совпадении имен классов иногда получается интересное поведение. Проиложение собирается и даже запускается. Но при старте в консоль выдает, что есть два класса с одинаковым именем и какой будет использован незнает.
В отличие от Java (<irony>в которой принято все подряд начинать с get</irony>), в Objective-C префикс-глагол «get…» используется для косвенного получения данных (для одного или нескольких значений).
(Лирическое отступление) Кстати, в Java именно с этим проблемы. Спецификацией четко не определено, что должен возвращать метод
List getSomeList() {
return someList;
}
— ссылку на someList (чаще всего так и делают)
— unmodifiable wrapper для someList
— копию someList
При отсутствии в Java явных ссылок большинство кодеров не видят и не понимают различий (какая ссылка? мне же вернули сам объект!). А потом вылезают трудно отловимые ошибки с concurrent modification и immutability.
Не обязательно, файлы можно разбросать как угодно, просто надо правильно сделать сборку. Все как в С. Пространство имен не обязательно определяет структуру файлов проекта и наоборот.
Шокирующий Objective-C для Java программистов, часть вторая