我正在重构两个类,试图将它们合并为一个,其中之前一个是另一个的较重版本。问题在于较重的班级并未完全包围较轻的班级。我正在考虑创建一个包含所有必需属性的类,其中每个预先存在的类现在是同一类的一部分,但是使用不同的初始化器实例化。在对象上未使用的属性有什么伤害?
为了给你一个想法,让我们说,我想,以减少这些:
ClassA.h
@interface
@property int shared1;
@property int shared2;
@property int a1;
@property int a2;
@end
ClassB.h
@interface
@property int shared1;
@property int shared2;
@property int b1;
@property int b2;
@end
我的计划是把这些结合起来:
ClassC.h
@interface
@property int shared1;
@property int shared2;
@property int a1;
@property int a2;
@property int b1;
@property int b2;
- (id) initHeavyVersion; // this will set b1 and b2 as well as shared but not a1/a2
- (id) initLightVersion; // this will set a1 and a2 as well as shared but not b1/b2
@end
是否有这样做的时候不造成任何伤害重叠的属性本身可能是相当大的对象?我看到它的方式,当这些属性未被使用时,它们应该只是携带一些额外的nil
,只不过是。所以性能/内存问题应该是最小的。不利之处在于混乱的公共界面。
我拒绝作文,因为那仍然会导致两个班级,而我的目标是将这些班级压缩成一个(几乎任何成本)。同样,代表也会产生同样的问题。
我看到的唯一选择是使用关联的对象,但这看起来不必要地棘手/花哨,并且仍然依赖于单独的初始化函数。
任何批评或替代建议将是最受欢迎的。