Cocoa:对象在不应该自动释放的情况下

时间:2012-01-12 19:41:53

标签: cocoa nstimer automatic-ref-counting retain

首先,我应该说我正在使用ARC,所以保留不是一种选择。对象的类是NSViewController类型,有两个NSTimers以及几个文本字段和按钮。奇怪的是,当两个计时器无效时,看起来该对象正在被释放。这是一个问题,因为有时我只想暂停或重新启动它们,这意味着我必须使它们无效,但是一旦我这样做,引用就会丢失,并且对该对象的任何消息都将抛出EXC BAD ACCESS。

我对内存管理或ARC不是很熟悉,但为什么参考丢失仅取决于定时器?我的意思是,仅仅因为它们失效并不意味着我不再需要这个物体了。

我已经尝试将计时器声明为实例变量和属性,但没有任何改变。

我真正需要的是,即使两个计时器都无效,也不能保留引用。我做错了什么?

1 个答案:

答案 0 :(得分:2)

NSTimer保留其目标,因此如果它是对象的唯一引用,则在计时器失效时将取消分配。您必须拥有对象的所有权,最好将其作为声明的强大属性。

编辑:将“委托”更改为“目标”;

是的,你必须为它声明一个属性和(可能)一个实例变量。 release notes给出了一个很好的例子,还有其他一些好的介绍。如果您的所有者类被取消分配,请确保您使计时器无效,否则您的视图控制器将会闲置。