在(文件: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;
答案 0 :(得分:4)
您不应存储声音ID的地址,而应存储声音ID本身
在属性中(即删除*
):
@property SystemSoundID theSound;
然后将其用作
[self setTheSound:thisSoundID];
AudioServicesPlaySystemSound(self.theSound);
在您的情况下,self.theSound
是本地变量 thisSoundID
的地址。
一旦你离开声明这个变量的函数,那个内存
location可能会被重用于其他东西,并且引用它是“未定义的
行为”。
(旁注:例如变量和属性,使用以a开头的名称 小写字母。)