发布顺序和dealloc消息

时间:2010-11-17 15:44:34

标签: iphone objective-c

建议的方法是什么?我应该先拨打超级dealloc还是最后一次,还是不重要?

- (void)dealloc
{
    [super dealloc];
    [orderNumber release];
    [orderDate release];
}

当谈到像didViewLoad这样的重写方法时 - 我应该先调用super还是last?

5 个答案:

答案 0 :(得分:4)

始终致电[super dealloc] 最后,否则您可能很容易遇到麻烦,因为您正在处理陈旧的对象。

使用didViewLoad,您通常在自己的代码之前调用它,因为您希望之前执行标准初始化内容。我已经看到Apple的代码中的示例根本没有调用超级实现,所以也许没有太多的事情发生。

答案 1 :(得分:2)

在这种情况下,在释放所有属性/ iVars后调用super。对于viewDidLoad / willAppear / etc。我通常先称之为超级。当您的自定义类依赖于由super创建的对象时,顺序很重要。对于默认的viewDidLoad,情况并非如此,因此它是首选项(我相信)。

答案 2 :(得分:0)

没有一般规则 - 您选择覆盖该方法,它有什么作用?您希望它在自定义实现之前或之后发生吗?

  • didViewLoad似乎不是一个真正的方法。

我们知道[super dealloc]完全破坏当前对象,因此任何代码都是错误的。因此,在这种情况下,最后调用[super dealloc]。

答案 3 :(得分:0)

指针orderNumberorderDate保留在您的对象中。

[super dealloc]释放您的对象(又名self)。

取消分配对象后,您不得依赖其中的内容(例如orderNumber),并在取消分配之前使用它们所执行的值。

因此,在释放自我对象之前解除分配成员。


对于init函数,情况正好相反 - 在构造对象 之前,无法初始化指针,因此在初始化成员之前会出现[super init]。 / p>

答案 4 :(得分:0)

关于viewDidLoad(等),你做任何有用的事情。如果你有想要在超类做它之前发生的事情,那么你在调用超类方法之前就已经完成了它,同样也是你想要在之后发生的事情。

如果您不知道您的代码是在之前还是之后运行,那么它可能无关紧要。