在一个(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/

10-11 19:12