0

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

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

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

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

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

如何解决这个问题呢?

4

1 回答 1

1

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


来自NSObject 参考

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

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

讨论

您可以使用此方法将消息传递到应用程序的主线程。主线程包含应用程序的主运行循环,是 NSApplication 对象接收事件的地方。在这种情况下,消息是您要在线程上执行的当前对象的方法。

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

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


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

于 2012-04-13T00:27:09.790 回答