Ответ 1
Objective-C не имеет понятия частных классов или переменных частного экземпляра формальным декларативным способом.
Вместо этого видимость в Objective-C полностью контролируется тем, где вы что-то объявляете. Если он находится в файле заголовка, его можно импортировать чем-то другим. Если он объявлен в файле реализации, он не может (разумно) быть импортирован и, следовательно, фактически закрыт для этого блока компиляции.
И под "это" я имею в виду почти все, что можно объявить; класс, глобальный и т.д.
т.е. если вы вставляете пару @interface/@implementation
для класса в файл .m
, этот класс фактически является приватным для этого модуля компиляции. Конечно, без пространств имен убедитесь, что класс уникально назван.
Рассмотрим это:
foo.h:
@interface Foo: NSObject
... public interface
@end
Foo.m:
@interface __FooSupportClass: NSObject
... interface here ...
@end
@implementation __FooSupportClass
@end
@interface Foo()
@property(retain) __FooSupportClass *__fooSupport;
@end
@implementation Foo
@synthesize __fooSupport = fooSupport__;
... etc ...
@end
Это дает вам класс поддержки private-by-visibility, доступный только в вашей реализации, с помощью переменной экземпляра и методов setter/getter в вашем классе, которые также не видны вне модуля компиляции.
(Обратите внимание, что Objective-C имеет "переменные экземпляра", а не "переменные-члены". Они похожи, но вам будет лучше использовать словарь языка.)