0

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

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

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

[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 *)timer 的代码为:

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];
}

期待帮助。谢谢你。

4

1 回答 1

1

没有必要。

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

[theMovie release];
[self playButtonClicked];

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

另外,为了避免误解,“完全释放”只是将 retainCount 减一。当它达到零时,它将自动解除分配。

顺便说一句,为什么在执行 playButtonClicked 之前释放(释放?)电影很重要?

此外,您的 waitForReleaseFinish: 代码可以工作,但没有必要,因为 theMovie 将在创建计时器之前发布。

于 2010-06-05T03:16:00.060 回答