gpt4 book ai didi

objective-c - 如果我打开了 ARC,是否需要释放 SystemSoundID?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:32:15 25 4
gpt4 key购买 nike

问题在标题中:“如果我打开了 ARC,是否需要释放 SystemSoundID?”这是我的代码:

NSURL *pathURL = [NSURL fileURLWithPath:path];
SystemSoundID soundid;
AudioServicesCreateSystemSoundID((__bridge_retained CFURLRef)pathURL, &soundid);
AudioServicesPlaySystemSound(soundid);

如果是这样,我什么时候发布它? (我没有 dealloc 方法,因为我使用的是静态方法并且无法更改)

此外,这是目前播放音效的最佳方式吗?我听说这个框架现在已被弃用。

谢谢!

最佳答案

是的,您确实需要发布它。 ARC 只关注 Obj-C 对象,SystemSoundID 不是 obj-c 对象。在某些时候,您确实需要对 SystemSoundID 值调用 AudioServicesDisposeSystemSoundID()。您可以使用系统声音完成例程(使用 AudioServicesAddSystemSoundCompletion())执行此操作。

至于 sergio 所说的,您正在泄漏 pathURL 对象。您已经使用了 __bridge_retained,它将对象的所有权转移到 CoreFoundation。您可能应该将其更改为 (__bridge CFURLRef)pathURL,这不会转移所有权。 AudioServices API 将根据需要保留该对象。

关于objective-c - 如果我打开了 ARC,是否需要释放 SystemSoundID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11253760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com