Таким образом, объект 'b' даже не имеет NSMutableArray в 'x'. «x» будет нулем для объекта «b».
Но я подозреваю, что здесь другое недоразумение. Объект «b» и объект «a» - это два разных объекта. Тот факт, что класс B является подклассом A, не означает, что добавление строк в некоторый экземпляр класса B приведет к добавлению этих строк в некоторый другой экземпляр класса A.
Чтобы ответить на ваш вопрос в комментариях, предположим, что вы хотите, чтобы каждый экземпляр класса B имел свой собственный NSMutableArray в «x». Вы можете сделать это так:
// in ClassA.h
@interface ClassA: NSObject {
NSMutableArray *x;
}
@property (retain,nonatomic) NSMutableArray *x;
@end
// in ClassA.m
@implementation ClassA
@synthesize x;
- (id)init {
if ((self = [super init])) {
x = [[NSMutableArray alloc] init];
// whenever we init an instance of class A, we will have
// an nsmutablearray in 'x'
}
return self;
}
- (void)dealloc {
// assume you aren't using ARC
[x release];
[super dealloc];
}
// in ClassB.h
@interface ClassB: ClassA {
NSMutableArray *y;
}
@property (retain,nonatomic) NSMutableArray *y; // for consistency
@end
// in ClassB.m
@implementation ClassB
@synthesize y;
- (id)init {
if ((self = [super init])) { // call Class A's init
y = [[NSMutableArray alloc] init];
// whenever we init an instance of class B, we will have
// everything an instance of A has, plus this y we need
}
return self;
}
- (void)dealloc {
// assume you aren't using ARC
[y release];
[super dealloc];
}
Я переместил ваш initVar в надлежащий init, нет причин иметь там два метода. И я просто показываю только init, оставляя addString и print.
Так что теперь вы можете сделать это:
ClassB *instanceOfB = [[ClassB alloc] init];
и у этого экземпляра будут нужные вам массивы x и y.
Я также оставил там объявления переменных экземпляра, хотя они не обязательны для новых компиляторов. Более новые версии компилятора могут неявно определять эти переменные экземпляра. Если вы этого не понимаете, не беспокойтесь об этом. Не так важно.
Надеюсь, это поможет.