在一个(file:Sound.m /方法:setSound)中,我有此设置,它可以成功设置并播放声音(看起来像)。
[self setTheSound:&thisSoundID];
AudioServicesPlaySystemSound(*(self.TheSound));
但是,在该方法之外调用时。我什么也没听到。虽然我知道它是从NSLog调用的。 (file:Sound.m /方法:playSound)
- (void) playSound
{
NSLog(@"Called playSound");
AudioServicesPlaySystemSound(*(self.TheSound));
}
这是(file:Sound.h /方法:playSound)上的属性设置
@property SystemSoundID *TheSound;
最佳答案
您不应该存储声音ID的地址,而应该存储声音ID本身
在属性中(即删除*
):
@property SystemSoundID theSound;
然后将其用作
[self setTheSound:thisSoundID];
AudioServicesPlaySystemSound(self.theSound);
在您的情况下,
self.theSound
是局部变量thisSoundID
的地址。一旦离开声明此变量的函数,该内存
该位置可能会被重用于其他用途,并且引用它是“未定义
行为”。
(注意:对于变量和属性,请使用以
小写字母。)
关于ios - @属性不持久?,声音不播放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21430823/