Во-первых, я надеюсь, что ваши два класса наследуются от NSObject и не являются корневыми классами.Создание нового корня в Objective-C на iOS на самом деле довольно сложно, если вы не держите свои экземпляры полностью в изоляции от Foundation / UIKit.
Два возможных решения:
Донне получить доступ к iVar напрямую.Сделайте и используйте аксессоры, вероятно, через директиву @property
.Это «более правильное» решение в том смысле, что класс, реализованный в библиотеке A, скорее всего, не должен выводить ivars класса из библиотеки B напрямую.Прохождение через средство доступа лучше сохраняет инкапсуляцию и признает, что прямой доступ к iVar является чрезвычайно нетипичным шаблоном в Objective-C (в основном ограничивается только классом, напрямую обращающимся к его собственным iVars).iVars, чтобы быть @public и расстраиваться.Хрупкие, нетипичные и чреватые опасностями.
Приватное в Objective-C действительно означает "что модуль компиляции там не может видеть это объявление здесь".
Таким образом, если вы хотите, вы можете объявить свойство, скажем, как общедоступное чтение и частное чтение:
Foo.h:
@interface Foo....
@property(readonly) int x;
@end
Foo+ Private.h:
@interface Foo()
@property(readwrite) int x;
@end
Foo.m: #import "Foo + Private.h" @implementation Foo @synthesize x;@ end
Все, что импортирует Foo.h, увидит только то, что x только для чтения.Реализация Foo увидит, что это readwrite.Как и все, что импортирует Foo + Private.h.