@property不坚持?,声音没有播放

时间:2014-01-29 12:14:05

标签: ios objective-c core-audio

在(文件:Sound.m / method:setSound)中我有这个,它成功地设置和播放声音(看起来似乎)。

  [self setTheSound:&thisSoundID];
  AudioServicesPlaySystemSound(*(self.TheSound));

然而,当在那个方法之外调用时。我什么都没听到。虽然我知道它会从NSLog调用。 (file:Sound.m / method:playSound)

- (void) playSound
{
    NSLog(@"Called playSound");
    AudioServicesPlaySystemSound(*(self.TheSound));
}

这是(file:Sound.h / method:playSound)

的属性设置
@property SystemSoundID *TheSound;

1 个答案:

答案 0 :(得分:4)

您不应存储声音ID的地址,而应存储声音ID本身 在属性中(即删除*):

@property SystemSoundID theSound;

然后将其用作

[self setTheSound:thisSoundID];
AudioServicesPlaySystemSound(self.theSound);

在您的情况下,self.theSound本地变量 thisSoundID的地址。 一旦你离开声明这个变量的函数,那个内存 location可能会被重用于其他东西,并且引用它是“未定义的 行为”。

(旁注:例如变量和属性,使用以a开头的名称 小写字母。)