1

Objective-C 中的对象自杀是一种好习惯吗?也就是说,对于一个对象来说,[self dealloc]在哪里-dealloc可以像往常一样有序地声明?主要风险是什么?

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

有关更详细的解释,请参阅我的帖子

4

2 回答 2

9

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

于 2010-09-29T07:37:44.887 回答
8

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

不。

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

如果您尝试在任何其他时间将 dealloc 发送到一个对象,您可能会冒着让其他对象留下悬空指针的风险。不要这样做。


你应该向自己发送释放吗?那是另一回事,但您仍应遵循内存管理规则。如果您已将保留发送给自己,那么在某些时候您将需要向自己发送释放。init 中有一个例外,如果初始化失败,您必须释放 self 并返回 nil(我想您可以声称 alloc 已将保留发送给 self)。

于 2010-09-29T08:36:56.677 回答