У меня проблема с классом Objective-C, когда включена ARC.iOS ARC: неожиданный вызов dealloc
Мои классы выглядит как эти:
@interface ParentClass : NSObject {
}
-(void)decodeMethod;
@end
@implementation ParentClass
-(void)decodeMethod{
}
@end
@interface ChilldClass : ParentClass{
int *buffer;
}
@end
@implementation ChildClass
-(id)init{
self = [super init];
if(self != nil){
buffer = (int *)malloc(20*sizeof(int));
}
return self;
}
-(void)dealloc{
free(buffer);
}
@end
У меня есть еще один класс, как этот:
@interface OtherClass : NSObject{
ParentClass *c;
}
@end
@implementation OtherClass
[...]
-(void)decode{
c = [[ChildClass alloc] init];
[c decodeMethod];
}
[...]
@end
Как вы можете видеть, ChildClass
объект создается и хранится в качестве атрибута в OtherClass
. Пока объект OtherClass
живет, объект ChildClass
, на который указывает c
, должен также жить, не так ли? Ну, у меня есть ошибка BAD_ACCESS, потому что после инициализации ChildClass
и до того, как вызывается decodeMethod
, метод dealloc
в ChildClass
будет автоматически выполнен.
Почему? ARC
включен, поэтому метод dealloc
следует вызывать автоматически, когда объект ChildClass
освобожден, но в этот момент его не должно произойти, поскольку он по-прежнему указывает c
.
Любая помощь?
спасибо!
Как '' decodeMethod' в ParentClass' доступ к Ивар в его подкласса ??? – Sulthan
Как вы создаете экземпляр 'OtherClass'? – Amar
Что находится в 'init'' ParentClass'? Может ли быть '[self release]'? – Sulthan