2

如果我在 iPhone 代码中实现以下内容:

NSString* soundPath = [[NSBundle mainBundle] pathForResource:soundFile ofType:@"wav"];
SystemSoundID feedbackSound;
AudioServicesCreateSystemSoundID((__bridge CFURLRef) [NSURL fileURLWithPath:soundPath], &feedbackSound);
AudioServicesPlaySystemSound(feedbackSound);

我真的必须释放“feedbackSound”,因为它是 C 代码吗?会泄漏吗?

我正在使用 ARC / iOS 6。

4

3 回答 3

5

你应该。正确的调用方法是:

AudioServicesDisposeSystemSoundID

参考)。

一般来说,ARC 只处理 Objective-C 对象。当您处理较低级别的框架(Core Graphics、AudioServices 等)时,许多调用将“在后台”分配内存,由您负责处理。在许多情况下,您有特定的方法来进行释放,就像您进行分配一样。

于 2013-03-02T11:22:08.523 回答
1

ARC 只管理 Objective-C 对象的内存。然而,系统声音服务是一个 C 接口。在这种情况下,您必须自己管理内存。

AudioServicesDisposeSystemSoundID (feedbackSound);
于 2013-03-02T11:23:52.767 回答
1

是的,你必须。ARC 仅适用于声明为 Objective-C 对象的类型。问题中的程序会产生泄漏。

malloc需要freenew需要deleteCFStringCreate...需要CFRelease——等等……</p>

于 2013-03-02T11:29:30.837 回答