Это вполне возможно, и в самом деле хорошей практикой.
В A.h вы должны импортировать только то, что абсолютно необходимо, например заголовки, содержащие протоколы, которые вы должны придерживаться публично. Любые другие необходимые классы должны быть предварительно определены с помощью @class
и @protocol
. Объявите любые свойства, которые вы можете использовать только для чтения.
@class SomeObject
@interface ClassA : NSObject
@property (strong, nonatomic, readonly) NSString *id;
@property (strong, nonatomic, readonly) SomeObject *object;
@end
В A.m вы должны импортировать любые заголовки, которые вам нужны конфиденциально. Кроме того, реализуйте расширение категории и переопределяйте любые свойства только для чтения как readwrite.
#import "SomeObject.h"
@interface ClassA()
@property (strong, nonatomic, readwrite) NSString *id;
@property (strong, nonatomic, readwrite) SomeObject *object;
@property (strong, nonatomic, readwrite) NSString *entirelyPrivate;
@end
@implementation A
. . . . etc
Если вы хотите, чтобы эти значения доступны для подкласса, но не к другим классам, вы можете поместить их в категории. Это делается несколькими классами в инфраструктуре Apple.
Например, создайте файл ClassA+Subclass.h
и включают в себя:
@interface ClassA (SubclassOnly)
@property (strong, nonatomic, readwrite) NSString *id;
@end
Тогда просто импортировать, что в реализации подкласса, который нуждается в «защищенный» доступ.
невозможно. Вы можете делать частные объявления только с использованием классов extenstions, но к ним также можно получить доступ –
Напротив, это возможно и хорошая практика. См. Мой ответ ниже. – tooluser