首先,我应该说我正在使用ARC,所以保留不是一种选择。对象的类是NSViewController类型,有两个NSTimers以及几个文本字段和按钮。奇怪的是,当两个计时器无效时,看起来该对象正在被释放。这是一个问题,因为有时我只想暂停或重新启动它们,这意味着我必须使它们无效,但是一旦我这样做,引用就会丢失,并且对该对象的任何消息都将抛出EXC BAD ACCESS。
我对内存管理或ARC不是很熟悉,但为什么参考丢失仅取决于定时器?我的意思是,仅仅因为它们失效并不意味着我不再需要这个物体了。
我已经尝试将计时器声明为实例变量和属性,但没有任何改变。
我真正需要的是,即使两个计时器都无效,也不能保留引用。我做错了什么?
答案 0 :(得分:2)
NSTimer
保留其目标,因此如果它是对象的唯一引用,则在计时器失效时将取消分配。您必须拥有对象的所有权,最好将其作为声明的强大属性。
编辑:将“委托”更改为“目标”;
是的,你必须为它声明一个属性和(可能)一个实例变量。 release notes给出了一个很好的例子,还有其他一些好的介绍。如果您的所有者类被取消分配,请确保您使计时器无效,否则您的视图控制器将会闲置。