ARC过早释放或根本不释放的麻烦

时间:2012-08-12 18:25:24

标签: objective-c cocoa automatic-ref-counting avfoundation

我有一个简单的小型音乐播放器,在10.8下使用AVFoundation。它工作得很好,但我最近才被介绍给ARC,这给了我一些麻烦。

该应用程序是基于文档的,大量必要的代码存在于预制的Document.h / .m文件中。标题中定义了__strong AVAudioPlayer对象,实现中的所有函数都使用它来播放音频文件。文件使用标准的readFromURL:方法加载。

关闭文档时,文件不会被释放甚至继续播放。如果AVAudioPlayer设置为弱,它几乎立即释放,文件将不再播放。

这里有什么我想念的吗?我知道我不能在ARC下手动发布,那么有什么可以保持对象的捆绑?

1 个答案:

答案 0 :(得分:1)

默认情况下,ARC中的对象指针很强。您对AVAudioPlayer的任何引用都没有被定义为弱并且位于仍然存在的对象/类中将使其无法被释放。如果您的文件继续播放,则可能不是ARC问题,而是您使用AVAudioPlayer进行的操作。

在ARC中“释放”内存的一种方法是将对象的指针设置为nil。如果没有对该对象的其他引用,则将对其进行解除分配。