iOS:使用@private隐藏设置属性

时间:2011-10-26 22:05:45

标签: objective-c ios xcode 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中完成某些事情?

1 个答案:

答案 0 :(得分:38)

@private仅影响ivars。它不会影响属性。如果您想避免公开属性,请将它们放在类扩展中。在.m文件的顶部,输入类似

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

这看起来像一个类别,但“name”类别为空。它被称为类扩展,编译器将其视为原始@interface块的一部分。但是因为它位于.m文件中,所以只有.m文件中的代码才能看到它,而它之外的代码只能看到标题中声明的公共属性。