AVQuePlayer和hpple的设计选择



我正在设计一个iPhone应用程序,使用AVQuePlayer类按顺序播放3个文件。

我需要按顺序播放的 3 个 url 必须首先使用 http://协议从.htm文件中提取。为此,我正在使用TFHpple类,从这里hpple git项目

我的

问题是我的AVQueuePlayer播放器必须在主线程上运行,当我尝试解析.htm文件时,屏幕没有响应任何触摸。

我首先需要解析这些.htm文件中包含的网址,然后将网址提供给AVQueuePlayer播放器。

我正在阅读Apple文档,该文档说多线程对于网络应用程序来说是一个糟糕的选择,但我需要使用hpple来解析.htm内容。

如何解决这个问题?

如果在主线程上使用 AVQueuePlayer 但从其他线程触发是唯一的问题,只需使用使用 performSelectorOnMainThread 从另一个线程调用的方法包装其启动。


来自 NSObject 参考;

- (void)performSelectorOnMainThread:(SEL)aSelector 
                         withObject:(id)arg 
                      waitUntilDone:(BOOL)wait

使用默认模式在主线程上调用接收器的方法。

讨论

可以使用此方法将消息传递到应用程序的主线程。主线程包含应用程序的主运行循环,并且是 NSApplication 对象接收事件的位置。本例中的消息是要在线程上执行的当前对象的方法。

此方法使用公共运行循环模式(即与 NSRunLoopCommonMode 常量关联的模式)在主线程的运行循环上对消息进行排队。作为其正常运行循环处理的一部分,主线程将消息取消排队(假设它以常见的运行循环模式之一运行)并调用所需的方法。从同一线程对此方法的多次调用会导致相应的选择器排队,并以与调用相同的顺序执行。

您无法取消使用此方法排队的邮件。如果要选择取消当前线程上的消息,则必须使用 performSelector:withObject:afterDelay: 或 performSelector:withObject:afterDelay:inModes: 方法。


此外,我建议研究RaptureXML来解析xHTML,因为它是精简,快速和方便的。

最新更新