启用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对象时自动调用,但此刻不应该发生,因为它仍然指向c

有什么帮助吗?

非常感谢你!

最佳答案

@interface ChilldClass : ParentClass{


您的问题可能是ChilldClass中的拼写错误引起的(典型错误?)

关于ios - iOS ARC:意外的“dealloc”调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16773720/

10-10 20:41