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

IOS: использование @private для скрытия свойств

Я отжимаю класс, у которого есть куча свойств, которые я хочу использовать только внутри. Значение Я не хочу, чтобы иметь доступ к ним, когда они создали мой класс. Вот то, что у меня есть в моем .h, но оно все еще не скрывает те из меню автозаполнения (попадание в список просмотра) в 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?

4b9b3361

Ответ 1

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

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

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