如果我在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
需要free
。new
需要delete
。CFStringCreate...
需要CFRelease
——等等…