Я предлагаю вам создать инициализатор стиля 'copy constructor' для родительского класса MyClass
и вызвать его из дочернего класса MyDerivedClass
initializer.
[MyDerivedClass initByCopying:someMyObject plusSomeNewProperties:stuff] ->
[MyClass initByCopying:someMyObject] ->
[NSObject init] -> // alloc, etc.
Вот какой-то псевдокод:
@interface MyClass : NSObject {
int AA;
// ...
int ZZ;
}
@end
@implementation MyClass
-initByCopying:(MyClass*)other;
{
if (self = [super init])
{
self.AA=other.AA;
//...
self.ZZ=other.ZZ;
}
return self;
}
@end
@interface MyDerivedClass {
int AAA;
}
@end
@implementation MyDerivedClass
-initByCopying:(MyClass*)other withNewValue:(int)newVar;
{
if (self = [super initByCopying:(MyClass*)other])
{
self.AAA = newVar;
}
return self;
}
@end
Я подозреваю, что если у вас есть 1000 элементов-членов, вы можете рассмотреть возможность использования пакета свойств или kvc для всех, кроме чувствительных к производительности, что сделает вашу initByCopying
процедуру намного проще.
Может быть ярлык для реализации конструктора копирования с использованием протокола копирования, но я не мог понять, как сделать это проще, чем в приведенном выше примере.