Разрешает ли Objective-C циклические зависимости? - PullRequest
18 голосов
/ 25 марта 2011

Я переписываю библиотеку Java в Objective-C, и я столкнулся со странной ситуацией.У меня есть два класса, которые импортируют друг друга.Это круговая зависимость.Поддерживает ли Objective-C такую ​​ситуацию?Если нет, как вы рекомендуете переписать его?

1 Ответ

54 голосов
/ 25 марта 2011

Импорт класса не является наследованием.Objective-C не допускает циклическое наследование, но допускает циклические зависимости.Что бы вы сделали - объявите классы в заголовках друг друга с помощью директивы @class и попросите файл реализации каждого класса импортировать заголовок другого.

ClassA.h

@class ClassB;

@interface ClassA : NSObject {
    ClassB *foo;
}
@end

ClassA.m

#import "ClassB.h"

@implementation ClassA
    // Whatever goes here
@end

ClassB.h

@class ClassA;

@interface ClassB : NSObject {
    ClassA *foo;
}

@end

ClassB.m

#import "ClassA.h"

@implementation ClassB
    // Whatever goes here
@end
...