如何知道电影播放器​​发布完成?

时间:2010-06-05 03:11:54

标签: iphone release mpmovieplayercontroller nstimer

我的目标是发布一个电影播放器​​(theMovie),然后在它完全发布后开始另一个动作(所谓的playButtonClicked)。我使用performSelector来延迟“playButtonClicked”1秒,它运行良好。代码是:

[电影发布]; [self performSelector:@selector(playButtonClicked)withObject:nil afterDelay:1];

但是,我不想总是延迟1秒。我想在“theMovie”完全发布后立即启动“playButtonClicked”。我尝试了以下代码,但它没有用,因为[timer userInfo]永远不会是nil。 有人知道如何检查完成的电影播放器​​发布。

[theMovie release];
//[self performSelector:@selector(playButtonClicked) withObject:nil afterDelay:1];

NSTimer *atimer =   [NSTimer scheduledTimerWithTimeInterval:0.1 target:self 
                                                  selector:@selector(waitForReleaseFinish:)
                                                  userInfo: (MPMoviePlayerController*) theMovie repeats:YES];

waitForRleaseFinish:(NSTimer *)计时器的代码是:

if ([timer userInfo]==nil)  //here I actually want to test if (theMovie==nil),but I don't know how to do and I'm not sure if it is a correct way to determine the release finished.
{
     [timer invalidate];
    [self playButtonClicked];
}

期待有所帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

没有必要。

如果您只是释放播放器然后调用playButtonClicked,就像这样:

[theMovie release];
[self playButtonClicked];

在第一行完成之前,或者直到theMovie被释放之前,它不会执行第二行。这都在同一个线程上,因此它将按顺序执行。你不需要计时器。虽然在等待完成的内容在新线程上执行的情况下,您将使用回调,而不是猜测它需要多长时间(这远远小于1秒!)。

另外,只是因为你没有误解,“完全释放”只是将retainCount减去一。它会在达到零时自动解除分配。

作为旁注,为什么在执行playButtonClicked之前发布电影(解除分配?)为何很重要?

此外,您的waitForReleaseFinish:代码工作,但这是不必要的,因为在创建计时器之前将释放电影。