-(IBAction)voiceBroadcast
{
if ([audioPlayer isPlaying]) {
[audioPlayer stop];
[NSObject cancelPreviousPerformRequestsWithTarget:self];
}
else {
if (nil != audioPlayer) {
[audioPlayer play];
audioPlayer.volume = 0.0;
[self performSelector:@selector(doBgMusicFadeIn)];
[self performSelector:@selector(doBgMusicFadeDown) withObject:nil afterDelay:3];
[self performSelector:@selector(startVoiceBroadcast) withObject:nil afterDelay:4];
}
}
}
-(void)dealloc
{
//position
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[super dealloc];
}
cancelPreviousPerformRequestsWithTarget:self
中的dealloc
被调用,但不起作用,仍会调用选择器。但 cancelPreviousPerformRequestsWithTarget:self
中的voiceBroadcast
没有问题。 {strong> cancelPreviousPerformRequestsWithTarget
中是否无法使用dealloc
方法?
答案 0 :(得分:5)
如果您正在使用UIViewController ...
我不知道为什么不执行,但你可以试试
[NSObject cancelPreviousPerformRequestsWithTarget:self];
在 -viewDidUnload
方法中,在dealloc之前调用。
答案 1 :(得分:1)
我从来没有取得任何成功
[NSObject cancelPreviousPerformRequestsWithTarget:(id)]
所以我使用
[NSObject cancelPreviousPerformRequestsWithTarget:(id) selector:(selector) object:(id)]
唯一的缺点是,对于之前设置的每个延迟执行,您必须对后者进行一次调用。
希望能有所帮助。不知道为什么第一个似乎不适合我。
答案 2 :(得分:0)
您已在performSelector方法中将nil作为参数传递,并使用cancelPrevious方法将self作为参数。在参数中使用不同的对象会导致问题。
使用此,
[self performSelector:@selector(SampleMethod) withObject:self afterDelay:delayTime];
[NSObject cancelPreviousPerformRequestsWithTarget:self];