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

我拧了一个有一堆我只想在内部使用的属性的类。 这意味着我不想让用户在创build我的课程时能够访问他们。 这是我在我的.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还需要做些什么?

@私人只影响ivars。 它不影响属性。 如果您想避免公开属性,请将其放入类扩展中。 在你的.m文件的顶部,放一些类似的东西

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

这看起来像一个类别,除了类别“名称”是空白的。 它被称为类扩展,编译器将它视为原始@interface块的一部分。 但是,因为它在.m文件中,所以只能在.m文件中编码,而外部的代码只能看到在头文件中声明的公共属性。