2013-05-27 5 views
0

У меня проблема с классом 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.

Любая помощь?

спасибо!

+0

Как '' decodeMethod' в ParentClass' доступ к Ивар в его подкласса ??? – Sulthan

+0

Как вы создаете экземпляр 'OtherClass'? – Amar

+0

Что находится в 'init'' ParentClass'? Может ли быть '[self release]'? – Sulthan

ответ

1
@interface ChilldClass : ParentClass{ 

Возможно ваша проблема вызвана орфографической ошибки в ChilldClass (опечатка?)

+0

Нет, нет опечаток. Спасибо! – josematamoros