【问题标题】:In a UIView dealloc method do you dealloc your properties BEFORE or AFTER [super dealloc]?在 UIView dealloc 方法中,您是在 [super dealloc] 之前还是之后释放属性?
【发布时间】:2011-04-15 21:42:40
【问题描述】:

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

我整天都在为 -[UIScrollView retainCount]: message sent to deallocated instance 错误而苦苦挣扎。

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

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

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

当我将方法更改为:

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

一切正常。我的问题是,如果首先或最后调用 [super dealloc] 会有所不同吗?在大多数示例中,我看到它被称为最后一个。

【问题讨论】:

  • 你为什么打电话给retainCount?你应该从不调用retainCount。

标签: iphone cocoa-touch ios4 memory-management


【解决方案1】:

[super dealloc] 应该始终是dealloc 中的最后一个呼叫。你的问题是你应该在其他对象上调用release,而不是deallocdealloc 在对象的释放计数达到零时由运行时调用,您的代码不应该直接调用它。

因此,您的代码实际上应该如下所示:

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

【讨论】:

    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2011-04-01
    相关资源
    最近更新 更多