Взаимозависимый класс - PullRequest
1 голос
/ 16 мая 2011

Скажем, класс A зависит от класса B и наоборот.

Так что, очевидно, в ah я бы поставил #import "bh", а в "bh" импортировал бы "ah"

Послечто

Должны ли мы

объявить @class A

в bh И @class B в ah

Должны ли мы сделать оба или использовать только @classодин раз?

Почему?

Я рассуждал, что если я сделаю это только один раз, скажем, включив @class B в ah, учитывая, что ah также содержит #import "bh", тогда класс ah уже знаето bh

Однако кажется, что я должен сделать это и в xcode, и мне интересно, почему.

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Нет ничего плохого в использовании предварительного объявления (т. Е. @class Foo) в заголовочном файле для каждого класса. Вы можете сделать это, если все, что вам нужно, это чтобы каждый класс ссылался на другой. Предварительное объявление просто сообщает компилятору: «Это имя относится к классу, а фактическое объявление класса будет позже».

Как вы говорите, вы также можете использовать предварительное объявление B в A.h, а затем просто импортировать A.h в B.h. Я не думаю, что в этом есть какая-то реальная выгода, если в А.х нет других вещей, на которые вам также нужно ссылаться в Б.х.

Однако, похоже, я должен это сделать и в xcode, и мне интересно, почему.

Если вы имеете в виду, что вы получаете ошибку при импорте A.h в B.h вместо использования прямого объявления A, пожалуйста, опубликуйте ошибку. Я не думаю, что с этим должна быть проблема. (И в любом случае проблема может быть связана с проблемой компилятора или Objective-C, а не с проблемой XCode. XCode - это просто IDE.)

0 голосов
/ 16 мая 2011

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

Что вы, вероятно, хотите, это объявить ClassA и ClassADelegate в ClassA.h. Затем объявите ClassB в ClassB.h и импортируйте ClassA.h оттуда, пусть ClassB соответствует протоколу ClassADelegate для разрешения циклической зависимости.

Таким образом, вы получите четкое отношение владения и код, который будет намного проще поддерживать и расширять в будущем.

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