0

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

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

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

我在这里缺少什么吗?我知道我不能在 ARC 下手动释放,那么是什么让对象被捆绑?

4

1 回答 1

1

ARC 中的对象指针默认是强的。您对您的任何引用都AVAudioPlayer没有被定义为弱并且位于仍然存在的对象/类中,这将阻止它被释放。如果您的文件继续播放,这可能不是 ARC 问题,而是您正在使用AVAudioPlayer.

在 ARC 中“释放”内存的一种方法是将指向对象的指针设置为nil. 如果没有其他对该对象的引用,它将被释放。

于 2012-08-12T19:05:44.707 回答