释放您失去踪迹的对象的最佳方式

时间:2009-12-30 20:20:02

标签: iphone objective-c cocoa cocoa-touch

所以我正在创建一个动画类。有一个计时器延迟。所以我将实例化这个类。让它做它的事情然后有一个timerFinished类型的委托继续。

这个问题来自我的庇护垃圾收集生涯。

发布此对象的最佳方法是什么?

我完成任务时是否会释放它自己(甚至不确定这是否可行)。 我是否有实现委托释放它的对象?

无法绕过最好的方法来解决问题。

4 个答案:

答案 0 :(得分:1)

通常,如果您不确定何时何地释放对象,则可以在初始化时调用autorelease。像这样:

NSObject *anObject = [[[NSObject alloc] init] autorelease];

答案 1 :(得分:1)

您的对象应该在完成后发布通知或向其委托发送消息,并且侦听对象或委托可以处理对象的清理。

答案 2 :(得分:1)

FWIW,我发现保留/释放自己的物体是相当危险的,原因很简单,你可能在背景中留下了你不知道的物体。更糟糕的是,如果他们向另一个对象发送消息,他们可能会保留您长期关闭的视图或控制器。

此外,此模式在MacOS上的垃圾收集器中不起作用。

所以,我现在正在尝试重新教育自己为每个可能有这些对象浮动的类保留一个全局NSArray。这样,在调试过程中,我有一个可以轻松看到这些对象的地方,我可以通过例如dealloc取消它们。拥有“cancelAllConnectionsWithDelegate:self”方法。

答案 3 :(得分:0)

是的,当您完成动画后,您可以向动画类实例发送[self release]消息。发送消息时,请确保您已经完成了动画类。