1

该方法的名称中包含“Get”,并且不会通过return返回某些内容。这需要例如指针CFStringRef,像这样:我是否拥有AudioSessionGetProperty返回的对象?

CFStringRef outValue; 
UInt32 propertySize = sizeof(outValue); 
AudioSessionGetProperty(propertyID, &propertySize, &outValue); 

文档说功能“拷贝”的值到所提供的outValue指针。

所以这是创建+1保留计数的对象,我负责释放/释放该数据?

回答

3

根据对AudioSessionGetProperty的文件,这取决于你所得到的属性是否为C类,或者如果它是一个核心基础值:

一些核心音频属性值是C型和其他人核心基础对象:

如果您调用此函数以检索基础对象的核心值,则该函数(尽管在其名称中使用了“获取”)复制该对象。您有责任释放 对象,如“内存管理”中的“创建规则”中所述。 Core Foundation的编程指南。

所以,如果你正在得到的是一个核心基础属性值,你将需要确保释放结果对象。

请注意,使用ARC不会自动为您处理。从ARC编程指南:

在很多Cocoa应用程序,你需要使用Core Foundation的风格 的对象,无论是从核心基础框架本身(如 CFArrayRef或CFMutableDictionaryRef),或者从采用 核心框架基础约定(如Core Graphics)(您可以使用类型 ,如CGColorSpaceRef和CGGradientRef)。

编译器不会自动管理Core的基线对象的生命周期;您必须调用CFRetain和CFRelease(或 对应的特定于型号的变体),如Core基金会内存管理规则(请参阅内存管理编程指南 指南)规定的。

如果Objective-C和核心基础风格的对象之间投射,您 需要告知使用一个投对象 的所有权语义的编译器(在objc/runtime.h所定义)或核心 基础式宏(在NSObject.h中定义):

相关问题