【发布时间】:2011-11-07 21:20:14
【问题描述】:
我目前正在编写一个从影片剪辑中提取帧的应用程序。我设计它以便提取将在单独的线程上完成,以防止应用程序冻结。提取过程本身会占用大量资源,但在模拟器中使用时效果很好。但是,在为 iPad 构建它时存在问题。当我执行另一个操作时(我告诉我的 AV 播放器在我提取帧时播放),线程意外停止工作,我相信它被杀死了。
我认为这是因为我使用了大量资源,但并不完全确定。
这是我的问题: 1. 如何判断我的线程是否/为什么停止? 2. 如果真的是过度加工怎么办?我真的需要执行此操作。
这是我使用的一些代码: 创建线程:
[NSThread detachNewThreadSelector:@selector(startReading) toTarget:self withObject:nil];
我会发布您需要的任何信息, 非常感谢!
更新 我现在正在使用 GCD,它会为我填充线程。但是操作系统仍然会杀死线程。
我确切地知道它何时发生。当我告诉我的 [AVplayer 播放] 时;它会杀死线程。
这个问题只发生在实际的 iPad 上而不是模拟器上
【问题讨论】:
-
如果你不得不问,请尝试使用更高级别的抽象,例如调度队列 (GCD) 或操作队列 (NSOperationQueue)。请参阅The Move Away from Threads 进行扩展讨论,或查找GCD 或NSOperationQueue 示例。这是非常有用的东西。
-
您的应用程序崩溃了吗?如果是这样,崩溃报告说什么?你确定 AVPlayer 是线程安全的吗?因为如果您正在调用 [AVplayer play] 并在后台线程中同时访问它,那可能就是问题所在。
-
您的提取线程是否作为后台线程运行?我正在学习 Objective-C,但是,如果您能够将其作为后台线程运行,则有助于避免被操作系统杀死。
标签: iphone ios multithreading ipad