我目前正在编写一个从影片剪辑中提取帧的应用程序。我设计了它,以便提取将在单独的线程上完成,以防止应用程序冻结。提取过程本身需要大量资源,但在模拟器中使用时工作良好。但是,为iPad构建时存在问题。当我执行另一个动作(我告诉我的AV播放器在抽取帧时播放)时,线程意外停止工作,并且我相信它正在被杀死。线程正在被操作系统杀死
我认为这是因为我使用了大量的资源,但并不完全确定。
以下是我的问题: 1.如何判断/为什么我的线程停止? 2.如果真的是过度处理,我应该怎么做?我真的需要这个行动来实施。
继承人使用一些代码即时通讯: 要创建线程:
[NSThread detachNewThreadSelector:@selector(startReading) toTarget:self withObject:nil];
我会后你需要, 感谢这么多的任何信息!
更新 我现在在使用GCD,它为我填充了线程。但是操作系统仍然会杀死线程。
我确切知道它在什么时候发生。当我告诉我的[AV播放器播放];它杀死了线程。
这个问题只有在实际的iPad,而不是在模拟器上
如果您不得不问,请尝试使用更高级别的抽象,例如调度队列(GCD)或操作队列(NSOperationQueue)。请参阅[移离线程](http://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/ConcurrencyandApplicationDesign/ConcurrencyandApplicationDesign.html#//apple_ref/doc/uid/TP40008091-CH100- SW8)进行扩展讨论,或者查找[GCD](http://stackoverflow.com/questions/7941860/#7941898)或[NSOperationQueue](http://stackoverflow.com/questions/830218/)示例。这是非常有用的东西。 – Jano
你的应用崩溃了吗?如果是的话,崩溃报告说什么?你确定AVPlayer是线程安全的吗?因为如果您在调用[AVplayer play]并在后台线程中同时访问它,那可能是问题所在。 – JeanLuc
您的提取线程是否作为后台线程运行?我正在学习Objective-C,但是,如果你能够将它作为后台线程运行,可以帮助不被操作系统杀死。 –