我是否需要在Objective-C代码(iOS 6与ARC)中释放C变量



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

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

我实际上必须释放"反馈声音",因为它是C代码?它会泄漏吗?

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

AudioServicesDisposeSystemSoundID

(引用).

一般来说,ARC只处理Objective-C对象。当你处理底层框架(Core Graphics, AudioServices等)时,许多调用将在"底层"分配内存,你负责处理这些内存。在许多情况下,您有特定的方法来执行释放,就像您有用于执行分配的方法一样。

ARC只管理Objective-C对象的内存。然而,System Sound Services是一个C接口。在这种情况下,您必须自己管理内存。

AudioServicesDisposeSystemSoundID (feedbackSound);

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

malloc需要freenew需要deleteCFStringCreate...需要CFRelease——等等…

最新更新