根据 AudioSessionGetProperty 的文档,这取决于您获取的属性是 C 类型还是核心基础值:
一些 Core Audio 属性值是 C 类型,而另一些是 Core Foundation 对象:
如果你调用这个函数来检索一个核心基础对象的值,那么这个函数——尽管在它的名字中使用了“Get”——复制了这个对象。您负责释放对象,如 Core Foundation 内存管理编程指南中的“创建规则”中所述。
因此,如果您获得的是核心基础属性值,则需要确保释放生成的对象。
请注意,使用 ARC 不会自动为您解决这个问题。来自 ARC 编程指南:
在许多 Cocoa 应用程序中,您需要使用 Core Foundation 样式的对象,无论是来自 Core Foundation 框架本身(例如 CFArrayRef 或 CFMutableDictionaryRef),还是来自采用 Core Foundation 约定的框架,例如 Core Graphics(您可能使用 CGColorSpaceRef 和 CGGradientRef 等类型) )。
编译器不会自动管理 Core Foundation 对象的生命周期;您必须按照 Core Foundation 内存管理规则的规定调用 CFRetain 和 CFRelease(或相应的特定于类型的变体)(请参阅 Core Foundation 的内存管理编程指南)。
如果您在 Objective-C 和 Core Foundation 风格的对象之间进行转换,您需要使用转换(在 objc/runtime.h 中定义)或 Core Foundation 风格的宏(在NSObject.h):