如果我在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。
发布于 2013-03-02 19:22:09
你应该这样做。要调用的正确方法是:
AudioServicesDisposeSystemSoundID
(reference)。
一般来说,ARC只处理Objective-C对象。在处理较低级别的框架(核心图形、AudioServices等)时许多调用都会“在幕后”分配内存,由您负责处理这些内存。在许多情况下,您有特定的方法来进行释放,就像您进行分配一样。
发布于 2013-03-02 19:23:53
ARC只管理Objective-C对象的内存。然而,系统声音服务是一个C接口。在这种情况下,您必须自己管理内存。
AudioServicesDisposeSystemSoundID (feedbackSound);
发布于 2013-03-02 19:29:31
是的,你必须这样做。ARC仅适用于声明为Objective-C对象的类型。问题中的程序将产生泄漏。
malloc
需要free
。new
需要delete
。CFStringCreate...
需要CFRelease
--以此类推…
https://stackoverflow.com/questions/15173832
复制相似问题