Обход циклической зависимости в Objective C - PullRequest
2 голосов
/ 23 июля 2011

У меня есть протокол, который определяется следующим образом:

@protocol Container

- (BOOL)putStuff: (Stuff *) theStuff;

@end

и класс со следующим объявлением:

@interface Stuff : NSObject {

}

@property(readwrite,nonatomic,retain) NSObject <Container> * containerHoldingMe;

@end

и я получаю сообщение об ошибке при объявлении putStuff «Ожидаемый тип». Однако, если я изменю аргумент метода на NSObject, он скомпилируется нормально, поэтому я думаю, что Objective C просто не допускает зависимость от цикла.

В реальных классах, над которыми я работаю, я хочу реализовать два. Однако как мне реализовать такую ​​логику без нее?

Ответы [ 2 ]

8 голосов
/ 23 июля 2011

К тому времени, когда компилятор оценивает ваш протокол Container, он не знает о вашем классе Stuff. Вы можете сообщить компилятору о своем классе Stuff с помощью предварительного объявления :

@class Stuff;

@protocol Container

- (BOOL)putStuff: (Stuff *) theStuff;

@end
0 голосов
/ 23 июля 2011

Вы должны использовать id здесь.

@property (readwrite, nonatomic, retain) id<Container> containerHoldingMe;
...