iOS ARC:意外的“dealloc”调用

时间:2013-05-27 12:56:06

标签: ios automatic-ref-counting

启用ARC时,Objective-C类出现问题。

我的课程如下:

@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对象释放时自动调用,但此时不应该发生,因为仍然指向{{1} }。

任何帮助?

非常感谢!

1 个答案:

答案 0 :(得分:1)

@interface ChilldClass : ParentClass{

您的问题可能是由ChilldClass(拼写错误?)

中的拼写错误引起的