Как я могу иметь ссылки между двумя классами в Objective-C? - PullRequest
5 голосов
/ 13 июля 2009

Я занимаюсь разработкой приложения для iPhone, и я немного знаком с Objective-C, а также со структурой class.h и class.m.

Теперь у меня есть два класса, в каждом из которых должна быть переменная другого типа. Но это только кажется невозможным.

Если в class1.m (или class2.m) я включаю class1.h, а затем class2.h, я не могу объявить переменные class2 в class1.h, если я включаю class2.h и затем class1.h Я не могу объявить переменные class1 в class2.h.

Надеюсь, вы поняли мою идею, потому что это сводит меня с ума. Неужели это невозможно сделать?

Спасибо.

Ответы [ 2 ]

20 голосов
/ 13 июля 2009

Вы можете использовать ключевое слово @class для предварительного объявления класса в заголовочном файле. Это позволяет использовать имя класса для определения переменных экземпляра без необходимости #import файла заголовка.

Class1.h

@class Class2;

@interface Class1
{
    Class2 * class2_instance;
}
...
@end

Class2.h

@class Class1;

@interface Class2
{
    Class1 * class1_instance;
}
...
@end

Обратите внимание, что вам все равно придется #import соответствующий заголовочный файл в ваших .m файлах

3 голосов
/ 13 июля 2009

Круговая зависимость часто является признаком проблемы проектирования. Вероятно, у одного или обоих классов слишком много обязанностей. Рефакторинг, который может возникнуть из циклической зависимости, перемещает взаимозависимую функциональность в свой собственный класс, который оба исходных класса используют.

Можете ли вы описать функциональность, которую каждый класс требует от другого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...