自杀:Objective-C对象自己调用自己的-dealloc方法

时间:2010-09-29 07:33:54

标签: objective-c nstimer dealloc self-destruction

Objective-C中的对象是自杀的好习惯吗?也就是说,一个对象声明[self dealloc] -dealloc允许像往常一样有序地降温?主要风险是什么?

碰巧我有一个特定的例子,一个自定义计时器对象,它扩展了NSObject并包含一个NSTimer实例和一个NSUInteger,它被设置为限制计时器触发的次数。当时间到了,对象告诉计时器-invalidate,然后通过调用它的-dealloc方法自杀。由于这是自动的,我们不必担心必须跟踪对象或关键地知道何时是解除分配它的正确时刻。

有关更详细的说明,请参阅here上的帖子。

2 个答案:

答案 0 :(得分:9)

你不应该调用-dealloc。而是调用[self release],使引用计数变为0,让系统调用-dealloc。

答案 1 :(得分:8)

  

Objective-C中的对象是自杀的好习惯吗?也就是说,对于一个声明[self dealloc]的对象,其中-dealloc允许像往常一样有序地降温?主要风险是什么?

没有

时间你应该写一个对dealloc的调用是将dealloc发送到你的一个类的dealloc方法中的超级对象。没有例外。

如果您尝试在任何其他时间将dealloc发送到对象,则可能会使其他对象留下悬空指针。不要这样做。


你是否应该向自己发送释放?这是另一回事,但您仍应遵循Memory Management Rules。如果您已将保留发送给自己,那么在某些时候您需要向自己发送保留。在init中有一个例外,如果初始化失败,你必须释放self并返回nil(我猜你可以声称alloc已经发送了retain to self)。