假设我有2个课程:Money和Dollar,其中Dollar继承自Money。
Money有一个在类扩展中声明的属性:
#import "Money.h"
@interface Money ()
@property(nonatomic) NSUInteger amount;
@end
@implementation Money
@end
Dollar继承了这个属性,但是在Dollar中的方法中看不到它。我可以通过在Dollar.m中重新声明该属性来“修复”:
@interface Dollar ()
@property(nonatomic) NSUInteger amount;
@end
@implementation Dollar
}
@end
我真的不喜欢这个,我甚至不确定我知道编译器在做什么:
除了类及其子类的实现之外,为每个人隐藏属性的最佳方法是什么?
理想情况下,我不希望在.h文件中显示数量,因为它是一个实现细节。
答案 0 :(得分:10)
在回答第一个问题时,可能是第一个选择。它只是在编译时为Money
汇总所有内容。编译器和预编译器很聪明。
您可以使用私有标头来完成您要执行的操作
公开标头文件 Money.h
//Money.h
@interface Money : NSObject
//public decl
@end
子类的私有头文件 Money-Private.h
//Money-Private.h
@interface Money ()
@property(nonatomic) NSUInteger amount;
@end
Money
的实现以及任何子类或类别使用的内容,例如
公共面对美元 Dollar.h
#import "Money.h"
@interface Dollar:Money
@end
和实施 Dollar.m
#import "Money-Private.h"
@implementation Dollar
-(void)foo
{
self.amount = 75;
}
@end
如果您选择创建公共框架,请确保只将公共标头复制到软件包中。