gpt4 book ai didi

Cocoa:对象在不应该自动释放的时候被自动释放

转载 作者:行者123 更新时间:2023-12-03 17:05:51 26 4
gpt4 key购买 nike

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

我对内存管理或 ARC 不太熟悉,但为什么引用丢失仅取决于计时器?我的意思是,仅仅因为它们无效并不意味着我不再需要该对象。

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

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

最佳答案

NSTimer 保留其目标,因此如果它是对该对象的唯一引用,则当计时器无效时它将被释放。您必须拥有对象的所有权,最好将其声明为强属性。

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

是的,您必须为其声明一个属性和(可能)一个实例变量。release notes举一个很好的例子,还有其他一些很好的介绍。如果您的所有者类被释放,请确保使计时器无效,否则您的 View Controller 将挂起。

关于Cocoa:对象在不应该自动释放的时候被自动释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com