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

时间:2011-04-15 21:42:40

标签: iphone cocoa-touch ios4 memory-management

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

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

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

-(void)dealloc {
    [myScrollView dealloc];
    [someProperty dealloc];
    [super dealloc];
}

问题是由于前面的[myScrollView dealloc],它在[super dealloc]上总是崩溃。

当我将方法更改为:

-(void)dealloc {
   [super dealloc];
   [myScrollView dealloc];
   [someProperty dealloc];
}

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

1 个答案:

答案 0 :(得分:8)

[super dealloc]应始终是dealloc中的最后一次通话。您的问题是您应该在其他对象上调用release,而不是dealloc。当对象的发布计数达到零时,运行时将调用dealloc,您的代码永远不应该直接调用它。

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

-(void)dealloc {
    [myScrollView release];
    [someProperty release];
    [super dealloc];
}