我正在编写一个类,该类具有一堆我只想在内部使用的属性。这意味着我不想让用户在创建我的类(class)后访问它们。这是我的 .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 中是否也需要做些什么?
最佳答案
@private
只影响 ivars。它不影响属性。如果您想避免公开属性,请将它们放在类扩展中。在您的 .m 文件中,在顶部放置类似
@interface Lines ()
@property (nonatomic) CGRect originalFrame;
// etc.
@end
这看起来像一个类别,只是类别“名称”是空白的。它称为类扩展,编译器将其视为原始@interface block 的一部分。但是因为它在 .m 文件中,所以它只对该 .m 文件中的代码可见,它之外的代码只能看到在 header 中声明的公共(public)属性。
关于objective-c - iOS:使用@private 隐藏属性不被设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909508/