在UIView dealloc方法中,你是否在[super dealloc]之前或之后释放了你的属性?

skå*_*fan 0 iphone cocoa-touch memory-management ios4

我有一个自定义UIView,它通过UIViewController内的NIB加载.

我一直在努力- [UIScrollView retainCount]:消息整天发送到解除分配的实例错误.

我的自定义UIView子类dealloc方法如下所示:

-(void)dealloc {
    [myScrollView dealloc];
    [someProperty dealloc];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

问题是它总是在[super dealloc]上崩溃,因为前面有[myScrollView dealloc].

当我改变方法时:

-(void)dealloc {
   [super dealloc];
   [myScrollView dealloc];
   [someProperty dealloc];
}
Run Code Online (Sandbox Code Playgroud)

一切都很好.我的问题是,如果首先或最后调用[super dealloc]会有所不同吗?在大多数例子中,我看到它被称为last.

ext*_*dom 8

[super dealloc]永远应该是最后一次打电话dealloc.你的问题是你应该调用release其他对象,而不是dealloc.dealloc当对象的释放计数达到零时,运行时调用,您的代码永远不应该直接调用它.

因此,您的代码应该看起来像:

-(void)dealloc {
    [myScrollView release];
    [someProperty release];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)