2012-01-12 77 views
1

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

我不是很熟悉,内存管理或ARC偏偏是基准失去了对计时器只依赖?我的意思是,仅仅因为它们失效并不意味着我不再需要这个对象。

我试图声明计时器作为实例变量和属性,但没有任何改变。

我真正需要的是参考不被保留,即使两个定时器无效。我究竟做错了什么?

回答

2

NSTimer保留其目标,所以如果它是当定时器无效它将被解除分配对象的唯一引用。你必须拥有你的对象的所有权,最好是通过声明强大的财产。

编辑:改变 “委托” 给 “目标”;

是的,你必须申报财产和(可能)一个实例变量它。 release notes举了一个很好的例子,还有其他一些好的介绍。如果您的所有者类已经被释放,请确保您使计时器无效,否则您的视图控制器将停留。

+0

你的意思是“目标”,而不是“委托”。 – 2012-01-12 19:49:49

+0

听起来很有希望。所以在我的另一个类(创建这个对象的那个类)中应该在它的头文件中声明这个对象?我应该使用哪些任务来使其成为强大的财产? – Elbimio 2012-01-12 19:50:45

+0

@Francis McGrew我还有一个问题。我宣布这个班是一个(非原子的,强大的)财产。问题是我需要该类的几个实例,当我做第二个时,重新启动前一个NSTimer我做了一个不良的访问。我想象第二个是覆盖第一个或某个东西,但他们应该是独立的。 – Elbimio 2012-01-13 20:49:47