cancelPreviousPerformRequestsWithTarget在dealloc中不起作用

时间:2011-10-25 08:52:04

标签: iphone selector dealloc

-(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方法?

3 个答案:

答案 0 :(得分:5)

如果您正在使用UIViewController ...

我不知道为什么不执行,但你可以试试

[NSObject cancelPreviousPerformRequestsWithTarget:self];

-viewDidUnload 方法中,在dealloc之前调用。

UIViewController's reference

中的更多信息

答案 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];