我正在拧一个有一堆我想在内部使用的属性的类。这意味着我不希望用户在创建我的类时访问它们。这是我在.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中完成某些事情?
答案 0 :(得分:38)
@private
仅影响ivars。它不会影响属性。如果您想避免公开属性,请将它们放在类扩展中。在.m文件的顶部,输入类似
@interface Lines ()
@property (nonatomic) CGRect originalFrame;
// etc.
@end
这看起来像一个类别,但“name”类别为空。它被称为类扩展,编译器将其视为原始@interface块的一部分。但是因为它位于.m文件中,所以只有.m文件中的代码才能看到它,而它之外的代码只能看到标题中声明的公共属性。