Подтвердить что ты не робот

Поддерживает ли Objective-C круговые зависимости?

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

4b9b3361

Ответ 1

Импорт класса не является наследованием. 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