在UIView dealloc方法中,您是在[super dealloc]之前还是之后取消分配属性?

问题描述

| 我有一个自定义UIView,它通过UIViewController内的NIB加载。 我一直在努力处理-[UIScrollView keepCount]:整天发送给已释放实例错误的消息。 我的自定义UIView子类dealloc方法如下所示:
-(void)dealloc {
    [myScrollView dealloc];
    [someProperty dealloc];
    [super dealloc];
}
问题在于它总是在[super dealloc]上崩溃,因为它前面有[myScrollView dealloc]。 当我将方法更改为:
-(void)dealloc {
   [super dealloc];
   [myScrollView dealloc];
   [someProperty dealloc];
}
一切正常。我的问题是,[super dealloc]是第一个还是最后一个调用会有所不同吗?在大多数示例中,我看到它被称为last。     

解决方法

[super dealloc]
应该始终是
dealloc
中的最后一个电话。您的问题是您应该在其他对象上调用
release
,而不是
dealloc
。当对象的释放计数达到零时,运行时将调用
dealloc
,因此您的代码永远不要直接调用它。 因此,您的代码实际上应如下所示:
-(void)dealloc {
    [myScrollView release];
    [someProperty release];
    [super dealloc];
}