0

我试图理解一些事情。在 A 类中,我正在创建一个 classB 的实例,在 B 中,有一个计时器,它总是重复,并且他永远启动了一个录音和播放系统。

在 A 类中,我创建了 B 的实例:

recordMachine *recMinst=[[recordMachine alloc]init];
[recMinst startMachine];
[recMinst release];

问题是,在 classB 中,接口中有实例变量,例如播放器、记录器指针和其他整数。

问题是,在我释放 A 中的实例之后,这个 classB 如何继续工作? A 不会在内存中创建一个位置来存储所有 B 实例变量,当我释放它时 - 它们消失了吗?

4

3 回答 3

1

如果您需要将 B 实例保留到其结束,则必须将其保留在 A 对象中直到 A 实例结束。在您的情况下,B 的保留计数在您释放后为 0,因此它被释放。

如果你想保留它,你必须将它保留在某个地方。我建议你保留它并在 A 的 dealloc 方法中释放它

于 2012-06-11T12:24:32.803 回答
0

A 没有在内存中创建一个位置来存储所有 B 实例变量,当我释放它时 - 它们消失了吗?

是也不是,release 不像 C++ delete 那样工作,例如它不会删除对象并清理其内存,而只会减少其引用计数。如果另一个对象持有它,那么它不会被释放,直到另一个对象也对其调用释放。

问题是,在我释放 A 中的实例之后,这个 classB 如何继续工作?

关于为什么 B 继续工作的唯一解释是因为其他一些物体正在抓住它。

您提到 B 类使用一个计时器(很可能是一个 NSTimer),您会将 B 实例传递给该计时器。因此 NSTimer 保持对 B 对象的引用并防止它被破坏。

检查您的实例上的引用计数以确定。

NSTimer 文档说“目标对象由计时器保留并在计时器无效时释放。”

于 2012-06-11T12:34:48.833 回答
0

如果您不手动释放 B 的 ivars,-dealloc它们仍在内存中。

于 2012-06-11T12:35:29.833 回答