该方法的名称中包含“获取”,并且不会通过return
返回内容。它需要一个指针,例如CFStringRef,如下所示:
CFStringRef outValue;
UInt32 propertySize = sizeof(outValue);
AudioSessionGetProperty(propertyID, &propertySize, &outValue);
文档说该函数将值“复制”到提供的outValue指针中。
所以这是创建一个具有+1保留计数的对象,我负责释放/释放该数据?
答案 0 :(得分:3)
根据AudioSessionGetProperty的文档,它取决于您获得的属性是C类型还是核心基础值:
某些Core Audio属性值是C类型,其他值是Core Foundation对象:
如果调用此函数来检索作为Core的值 基础对象,然后这个功能 - 尽管在其中使用“获取” name-复制对象。你有责任释放 对象,如内存管理中的“创建规则”中所述 核心基金会编程指南。
因此,如果您获得的是核心基础属性值,则需要确保释放生成的对象。
请注意,使用ARC不会自动为您解决此问题。从ARC编程指南:
在许多Cocoa应用程序中,您需要使用Core Foundation风格 对象,无论是来自Core Foundation框架本身(例如 CFArrayRef或CFMutableDictionaryRef)或采用的框架 核心基础约定,例如Core Graphics(您可以使用类型 比如CGColorSpaceRef和CGGradientRef)。
编译器不会自动管理Core的生命周期 基础对象;你必须打电话给CFRetain和CFRelease(或者 相应的类型特定的变体)由核心指示 基础内存管理规则(请参阅内存管理编程 核心基金会指南)。
如果您在Objective-C和Core Foundation风格的对象之间进行投射,那么 需要告诉编译器有关对象的所有权语义 使用强制转换(在objc / runtime.h中定义)或核心 基础风格的宏(在NSObject.h中定义):