iOS: использование @private для скрытия свойств от настройки - PullRequest
16 голосов
/ 27 октября 2011

Я скручиваю класс, у которого есть куча свойств, которые я хочу использовать только внутри. Это значит, что я не хочу, чтобы пользователь мог получить к ним доступ, когда они создали мой класс. Вот то, что у меня есть в моем .h, но он все еще не скрывает их из меню автозаполнения (нажав escape, чтобы увидеть список) в XCode:

@interface Lines : UIView {
    UIColor *lineColor;
    CGFloat lineWidth;

    @private
        NSMutableArray *data;
        NSMutableArray *computedData;
        CGRect originalFrame;
        UIBezierPath *linePath;
        float point;
        float xCount;
}


@property (nonatomic, retain) UIColor *lineColor;
@property (nonatomic) CGFloat lineWidth;
@property (nonatomic) CGRect originalFrame;
@property (nonatomic, retain) UIBezierPath *linePath;
@property (nonatomic) float point;
@property (nonatomic) float xCount;
@property (nonatomic, retain) NSMutableArray *data;
@property (nonatomic, retain) NSMutableArray *computedData;

Я думал, что мне нужно было использовать @private, но, возможно, я сделал это неправильно. Что-то должно быть сделано в моем .m?

1 Ответ

38 голосов
/ 27 октября 2011

@private влияет только на иваров.Это не влияет на свойства.Если вы хотите избежать обнародования свойств, поместите их в расширение класса.В вашем файле .m вверху поместите что-то вроде

@interface Lines ()
@property (nonatomic) CGRect originalFrame;
// etc.
@end

Это похоже на категорию, за исключением того, что категория "имя" пуста.Он называется расширением класса, и компилятор обрабатывает его так, как если бы он был частью исходного блока @interface.Но поскольку он находится в файле .m, он виден только коду в этом файле .m, а код вне него может видеть только открытые свойства, объявленные в заголовке.

...