我正在开始iPhone编程,我正在尝试制作一个小测试应用程序,当您按下按钮时会发出声音。这个问题很漂亮,所以请耐心等待。我几乎想弄清楚如何处理内存情况。我在哪里发布创建的实例以避免内存问题?现在,如果我多次快速点击按钮,应用程序崩溃了。我尝试在viewDidLoad中声明所有内容并将释放放在dealloc方法中,但在此设计下我必须等到整个声音完成播放才能再次播放声音。我希望能够在正在播放的声音中间按下按钮并“中断它”,如果这是有道理的。
现在写入的方式是按下按钮时,调用此方法并播放声音
-(IBAction)buttonPressed:(id)sender{
NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error: NULL];
theAudio.delegate = self;
[theAudio play];
}
在此设置中,它可以通过再次按下按钮来“中断”已播放的声音并重新启动声音。然而,快速按下它会使应用程序崩溃。
答案 0 :(得分:0)
您应该在退出方法之前立即释放:
-(IBAction)buttonPressed:(id)sender{
NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"mp3"];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error: NULL];
theAudio.delegate = self;
[theAudio play];
[theAudio release];
}
或类似的东西。
因为当你分配/初始化一个局部变量时,你会为它指定一个+1的保留计数。但是当你退出方法时,对var的引用仍然存在,你无法访问它,这导致内存泄漏。尝试从Memory Management开始。祝你好运。